Spec-Zone.ru › CodeIgniter 3

Статические страницы

Примечание: В этом руководстве предполагается, что вы загрузили CodeIgniter и установили фреймворк в вашей среде разработки.

Первым делом вы создадите контроллер для обработки статических страниц. Контроллер — это просто класс, который помогает делегировать работу. Он является связующим звеном вашей веб-приложения.

Например, при обращении к:

http://example.com/news/latest/10

Можно предположить, что существует контроллер с именем «news». Вызываемый метод в news будет «latest». Задача метода news может заключаться в получении 10 новостных элементов и отображении их на странице. Очень часто в MVC вы увидите шаблоны URL, которые соответствуют:

http://example.com/[имя-класса-контроллера]/[имя-метода-контроллера]/[аргументы]

По мере усложнения схем URL это может измениться. Но пока этого достаточно.

Создайте файл в application/controllers/Pages.php со следующим кодом.

<?php
class Pages extends CI_Controller {

        public function view($page = 'home')
        {
        }
}

Вы создали класс с именем Pages, имеющий метод view, который принимает один аргумент с именем $page. Класс Pages наследуется от класса CI_Controller. Это означает, что новый класс pages может получить доступ к методам и переменным, определённым в классе CI_Controller (system/core/Controller.php).

Контроллер станет центром каждого запроса к вашему веб-приложению. В технических обсуждениях CodeIgniter его может называть «супер объектом». Как и любой PHP-класс, вы обращаетесь к нему внутри контроллеров как $this. Обращение к $this позволяет загружать библиотеки, представления и в целом управлять фреймворком.

Теперь, когда вы создали свой первый метод, пришло время создать некоторые базовые шаблоны страниц. Мы создадим два «представления» (шаблоны страниц), которые будут служить нашим подвалом и заголовком страницы.

Создайте заголовок в application/views/templates/header.php и добавьте следующий код:

<html>
        <head>
                <title>CodeIgniter Tutorial</title>
        </head>
        <body>

                <h1><?php echo $title; ?></h1>

Заголовок содержит базовый HTML-код, который вы хотите отобразить перед загрузкой основного представления, вместе с заголовком. Он также выведет переменную $title, которую мы определим позже в контроллере. Теперь создайте подвал в application/views/templates/footer.php, включив следующий код:

                <em>&copy; 2015</em>
        </body>
</html>

Добавление логики в контроллер

Ранее вы создали контроллер с методом view(). Этот метод принимает один параметр — имя загружаемой страницы. Шаблоны статических страниц будут находиться в каталоге application/views/pages/.

В этом каталоге создайте два файла с именами home.php и about.php. В этих файлах напишите любой текст (например, «Hello World!») и сохраните их.

Для загрузки этих страниц вам нужно проверить, действительно ли запрашиваемая страница существует:

public function view($page = 'home')
{
        if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
        {
                // Whoops, we don't have a page for that!
                show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);
}

Теперь, когда страница существует, она загружается, включая заголовок и подвал, и отображается пользователю. Если страница не существует, отображается ошибка «404 Страница не найдена».

Первая строка в этом методе проверяет существование страницы. Используется встроенная функция PHP file_exists(), чтобы проверить, находится ли файл в ожидаемом месте. show_404() — встроенная функция CodeIgniter, которая отображает страницу ошибки по умолчанию.

В шаблоне заголовка использовалась переменная $title для настройки заголовка страницы. Значение title определяется в этом методе, но вместо присвоения значения переменной, оно присваивается элементу title в массиве $data.

Последнее, что нужно сделать, это загрузить представления в порядке их отображения. Второй параметр в методе view() используется для передачи значений в представление. Каждое значение в массиве $data присваивается переменной с именем его ключа. Таким образом, значение $data['title'] в контроллере эквивалентно значению $title в представлении.

Маршрутизация

Контроллер теперь работает! Перейдите в свой браузере по адресу [your-site-url]index.php/pages/view, чтобы увидеть свою страницу. При посещении index.php/pages/view/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 документации.

Здесь второе правило в массиве $route соответствует любому запросу, используя символ подстановки (:any), и передает параметр методу view() класса Pages.

Теперь посетите index.php/about. Была ли она правильно перенаправлена к методу view() в контроллере pages? Отлично!

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/tutorial/static_pages.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API