Как известно, начиная с версии 2.2 фреймворк
Kohana больше не поддерживает библиотеку Loader. Поэтому у многих возникает вопрос: «А как, собственно говоря, теперь быть?»
Собственно, ничего страшного не произошло. Да, теперь нельзя использовать
$this->load->library() синтаксис. Но что по сути делала данная функция? Две простых вещи — создавал новый экземпляр указанно класса (библиотеки) и размещала на него ссылку в свойстве текущего класса ($this->classname).
Другое следствие исклюечения библиотеки — невозможность использовать функцию Autoload. На самом деле у нас осталось достаточно инструментов, чтобы реализовать автоматическую загрузку нужных нам классов. И один из таких выходов — создать свой базовый контроллер (Base Controller) и использовать его вместо Core Controller. Для наглядности приведу короткий пример:
Создаем новый файл
application/controller/base.php и размещаем в нем следующий код:
abstract class Base_Controller extends Controller {
public function __construct() {
parent::__construct(); // Данная строчка необходима, чтобы вызвать конструктор перегружаемого контроллера (!)
$this->session=Session::instance(); // создаем экземпляр библиотеки для работы с сессией
// ...
// Любой другой код
//...
}
}
Так как класс асбтрактный, то создать его экземпляр не получится, да нам этого и не нужно. Использовать созданный класс ледует следующим образом:
class Frontend_Controller extends Base_Controller {
public function index() {
$this->session->get_var('my_var');
// ... и т.д.
}
}
Вот, собственно, и все. Хотя, нет. Позволю себе еще одно дополнение.
На самом деле создавать свой базовый класс контроллера — не единственный выход. Класс Controller наследуется от Core_Controller. Если класс Core_Controller не задан, то он автоматически задается во время выполнения скриптов. Поэтому, чтобы переобределить стандартное поведение класса Controller, достаточно явно задать класс Core_Controller. Как это делается расскажу в следующий раз.
Комментарии (0)
RSS свернуть / развернутьТолько зарегистрированные и авторизованные пользователи могут оставлять комментарии.