Урок — статичные страницы
Примечание: Этот урок предполагает, что вы загрузили CodeIgniter и установили фреймворк в вашем окружении разработки.
Для начала давайте установим контроллер для отображения статичных страниц. Контроллер это просто класс, который помогает делегировать работу. Это клей вашего веб-приложения.
Например, когда происходит такой вызов: http://example.com/news/latest/10
мы можем представить, что есть контроллер, называемый News.
Вызываемый метод контроллера новостей — latest();.
Работа метода новостей заключается в том, чтобы получать по 10 элементов новостей, и выводить их на странице.
Очень часто в MVC, вы можете увидеть паттерны URL, которые соответствуют http://example.com/[controller-class]/[controller-method]/[arguments]
Схема URL может быть более комплексной, она может изменяться.
Но на текущий момент это все, что нам пока надо знать.
Создайте файл в application/controllers/pages.php со следующим кодом.
Вы создали класс с названием Pages, с методом отображения, который приниамет один аргумент $page. Класс страниц расширяет класс CI_Controller. Это означает, что новый класс страниц получит доступ к методам и переменным, определенным в классе CI_Controller (system/core/Controller.php).
Контроллер — это то, что будет центром каждого запроса к вашему веб-приложени. В технических обсуждениях CodeIgniter, часто ссылаются на суперобъект. Как любой другой класс PHP, вы ссылаетесь на него из вашего контроллера через $this. Ссылка на $this позволяет вам загружать библиотеки, отображения и обычные команды фреймворка.
Сейчас вы создали ваш первый метод, и теперь настало время сделать основные шаблоны страницы. Мы создадим два отображения (шаблоны страниц), которые будут представлять шапку и подвал нашей страницы.
Создайте шапку в application/views/templates/header.php и добавьте следующий код.
Шапка содержит основной код HTML, который вы будете выводить перед загрузкой основного отображения, вместе с заголовком. Она также выводит переменную $title, которая будет позже определена в контроллере. Теперь создадим подвал в application/views/templates/footer.php, который включает следующий код:
Добавление логики в контроллер
Ранее вы устанавливали контроллер с методом view(). Метод принимает один параметр, который указывает на имя страницы, которую нужно загрузить. Шаблоны статических страниц будут находиться в директории application/views/pages/.
В этой директории создайте два файла home.php и about.php. В этих файлах напишите любой текст, все что пожелаете, и сохраните их. Если вы не хотите быть оригинальным, попробуйте "Hello World!".
Чтобы загрузить эти страницы, вы должны проверить существование запрашиваемых страниц:
public function view($page = 'home') { if ( ! file_exists('application/views/pages/'.$page.'.php')) { // Упс, у нас нет такой страницы! show_404(); } $data['title'] = ucfirst($page); // Сделать первую букву заглавной $this->load->view('templates/header', $data); $this->load->view('pages/'.$page, $data); $this->load->view('templates/footer', $data); }
Теперь, если страница существует, она будет загружена, включая шапку и подвал, и будет показана пользователю. Если страница не существует, будет показана ошибка "404 Page not found".
Первая строка в этом метода проверяет существование страницы. Родная функция PHP file_exists() используется для проверки существования файла. Функция show_404() встроена в CodeIgniter, она позволяет отображать страницы ошибок по умолчанию.
В шаблоне шапки переменная $title была использована для настройки заголовка страницы. Значение заголовка определяется в этом методе, но вместо присвоения значения переменной, оно присваивается элементу title массива $data.
Наконец мы загружаем отображения, чтобы они отобразились. Второй параметр метода view() используется для передачи значений в отображение. Каждое значение в массиве $data ассоциируется переменной с именем, соответствующим ключу. Поэтому значение $data['title'] в контроллере эквивалентно значению $title в отображении.
Роутинг
Теперь контроллер функционирует! Направьте ваш браузер в [your-site-url]index.php/pages/view чтобы увидеть вашу страницу. Когда вы посещаете index.php/pages/view/about, вы увидите страницу about, включающую шапку и подвал.
Используя собственные правила роутинга, вы можете переадресовать любой URI к любому контроллеру и методу, изменяя нормальное поведение:
http://example.com/[controller-class]/[controller-method]/[arguments]
Давайте сделаем это. Откройте файл роутинга, находящийся в application/config/routes.php и добавьте две следующие строки. Удалите весь другой код, который устанавливает любые элементы в массиве $route.
$route['default_controller'] = 'pages/view'; $route['(:any)'] = 'pages/view/$1';
CodeIgniter считывает его правила роутинга сверху вниз, и перенаправляет запрос по первому совпавшему правилу. Каждое правило это регулярное выражение (слева), перенаправляющее запрос в указанный контроллер и метод (справа). Когда приходит запрос, CodeIgniter ищет первое совпадение, и вызывает соответствующий контроллер и метод, возможно с аргументами.
Больше информации о роутинге вы можете найти в документации URI роутинга.
Здесь второе правило в массиве $routes, соответствующее любому запросу, используя строку шаблона (:any), и передающее параметр в метод view() класса Pages.
Теперь посетите index.php/about. Роутинг сработал корректно? Здорово!