Как реализовать Autoload в Kohana 2.2 и выше

Как известно, начиная с версии 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
  • 12 ноября 2009, 23:09
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.