Базовый контроллер
Базовый контроллер (BaseController) является базовым классом, все контроллеры должны быть производными от этого класса. Класс BaseController является абстрактным классом, и непосредственное создание экземпляра этого класса невозможно.
Методы
Класс имеет следующие методы:
- public bool checkParameters(array $params) - проверяет соответствие переданных параметров правилам контроллера (см. Правила перевода параметров)
- public string getStatus() - возвращает статус контроллера. Статус контроллера может сигнализировать об ошибке, например - 404
- protected void addRule() - добавляет правила перевода параметров
Правила перевода параметров
Правила должны быть добавлены в конструкторе класса. Каждое отдельное правило имеет следующий вид:
'имя' => 'шаблон URL: имена параметров'
При этом шаблон URL задается в виде регулярного выражения (PCRE), с символом слеш "/" в качестве разделителя без надобности экранирования. Имена параметров также задаются через слеш. Для того, чтобы подстрока сохранилась в переменной, ее необходимо заключить в скобки.
Например, для дополнительной части URL вида: calendar/2008/08/07 правило будет выглядеть следующим образом:
'date' => '(calendar)/(\d{4})/(\d{2})/(\d{2}): temp/year/month/day'
Переменные сохраняются в массиве переменной окружения - ENV по имени переменной, имя правила сохраняется в ENV->action.
//Пример 1.
Framework::import('patterns.BaseController'); // подключаем базовый контроллер
class BlogController extends BaseController
{
public function __construct()
{
parent::__construct(); // вызываем конструктор из базового контроллера
// добавляем следующее правило с именем entry:
// для URL вида 'http://example.com/blog/101/' при адресе контроллера '/blog/' транслировать параметр '101' в переменную 'id'
$this->addRule(
array(
'entry' => '(\d+): id'
)
);
}
}
Также возможно добавить сразу несколько правил.
//Пример 2.
Framework::import('patterns.BaseController'); // подключаем базовый контроллер
class BlogController extends BaseController
{
public function __construct()
{
parent::__construct(); // вызываем конструктор из базового контроллера
$this->addRule(
array(
'entry' => '(\d+): id',
'rss' => '(rss): temp',
'comments' => '(\d+)/(comments): id/comments'
)
);
}
}
Свойства
Для более удобного доступа к наиболее используемым объектам, в базовом контроллере предусмотрены следующие свойства:
- $this->F - экземпляр фреймворка
- $this->T - экземпляр шаблонизатора
- $this->Conf - экземпляр компонента Conf
Также вызов любого свойства будет обращено к компоненту Conf, на попытку вызова переменных окружения. То есть, вызов $this->Conf->ENV можно сократить до $this->ENV. Наиболее часто используемые переменные следующие:
- $this->PTH - массив путей
В контроллере имеются дополнительная переменная:- $this->PTH->this - путь к текущему контроллеру
- $this->PTH->this - путь к текущему контроллеру
- $this->URL - массив адресов
- $this->URL->this - адрес текущего контроллера
- $this->URL->self - полный текущий адрес
- $this->ENV - переменные окружения
Содержит:- $this->ENV->language - имя языка
- $this->ENV->language_id - ID языка
- $this->ENV->action - текущее действие контроллера (имя правила перевода параметра)
- $this->ENV->{$var} - параметры
- $this->CNF - конфигурационные данные