Расширение контроллера
Основной контроллер CodeIgniter изменять не следует, но для вас предоставлено расширение по умолчанию в файле app/Controllers/BaseController.php. Любые новые контроллеры, которые вы создадите, должны расширять BaseController для использования предварительно загруженных компонентов и любой дополнительной функциональности, которую вы предоставите:
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class Home extends BaseController
{
// ...
}
Предварительная загрузка компонентов
Базовый контроллер — отличное место для загрузки любых вспомогательных функций, моделей, библиотек, сервисов и т. д., которые вы планируете использовать каждый раз при запуске проекта. Вспомогательные функции следует добавлять в предопределенный массив $helpers. Например, если вы хотите, чтобы вспомогательные функции HTML и Text были доступны во всех случаях:
protected $helpers = ['html', 'text'];
Любые другие компоненты для загрузки или данные для обработки следует добавлять в конструктор initController(). Например, если в вашем проекте активно используется библиотека сессий, вы можете инициировать её здесь:
public function initController(...)
{
// Do Not Edit This Line
parent::initController($request, $response, $logger);
$this->session = \Config\Services::session();
}
Дополнительные методы
Базовый контроллер не маршрутизируется (маршрутизация выполняется системной конфигурацией в 404 Page Not Found). В качестве дополнительной меры безопасности все новые методы, которые вы создаёте, должны быть объявлены как protected или private и доступны только через контроллеры, которые вы создаете и которые расширяют BaseController.
Другие варианты
Возможно, вам понадобится больше одного базового контроллера. Вы можете создать новые базовые контроллеры, если все другие создаваемые вами контроллеры расширяют соответствующий базовый контроллер. Например, если в вашем проекте есть сложный публичный интерфейс и простая административная панель, вы можете расширить BaseController для публичных контроллеров и использовать AdminController для любых административных контроллеров.
Если вы не хотите использовать базовый контроллер, вы можете обойти его, сделав так, чтобы ваши контроллеры расширяли системный контроллер вместо него:
class Home extends \CodeIgniter\Controller
{
}
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/extending/basecontroller.html