Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Контроллеры

Контроллер — класс, методы которого отвечают на запросы. Маршрут решает, какой метод вызвать, а метод возвращает ответ: текст, страницу или перенаправление. Контроллеры лежат в папке app/Controllers, по одному классу в файле.

Создание контроллера

php spark make:controller Posts

Команда создаёт файл app/Controllers/Posts.php с пустым методом index(). Заполните его:

// app/Controllers/Posts.php
namespace App\Controllers;
 
class Posts extends BaseController
{
    public function index(): string
    {
        return 'Список статей';
    }
}

Имя файла совпадает с именем класса, включая заглавную букву. Сам по себе контроллер ещё не открывается в браузере — ему нужен маршрут.

Подключение маршрута

// app/Config/Routes.php
$routes->get('posts', 'Posts::index');

Откройте http://localhost:8080/posts — появится строка «Список статей». Запись Posts::index означает «класс Posts, метод index».

Параметр из адреса

Значение из адреса приходит в метод аргументом. Добавьте маршрут и метод:

// app/Config/Routes.php
$routes->get('posts/(:num)', 'Posts::show/$1', ['as' => 'posts.show']);
// app/Controllers/Posts.php
public function show(int $id): string
{
    return "Статья №$id";
}

Адрес /posts/5 выведет «Статья №5».

Страница не найдена

Если нужной записи нет, контроллер бросает исключение, и посетитель видит страницу с кодом 404:

use CodeIgniter\Exceptions\PageNotFoundException;
 
public function show(int $id): string
{
    if ($id > 100) {
        throw PageNotFoundException::forPageNotFound('Статья не найдена');
    }
 
    return "Статья №$id";
}

Строка use ставится в начале файла, после namespace.

BaseController

Все контроллеры наследуют класс BaseController из файла app/Controllers/BaseController.php. От него каждый контроллер получает готовые свойства:

СвойствоЧто это
$this->requestТекущий запрос: данные формы, параметры адреса
$this->responseОтвет: заголовки, код состояния, JSON
$this->helpersСписок помощников, подключаемых автоматически

В BaseController удобно держать код, общий для всех страниц.

Частая ошибка

Создать контроллер недостаточно: без строки в app/Config/Routes.php адрес вернёт 404. Автоматический поиск контроллера по адресу в CodeIgniter 4 по умолчанию выключен. Проверьте командой php spark routes, что нужный адрес есть в списке и метод контроллера объявлен как public.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.