Базовый контроллер

Базовый контроллер (BaseController) является базовым классом, все контроллеры должны быть производными от этого класса. Класс BaseController является абстрактным классом, и непосредственное создание экземпляра этого класса невозможно.

Методы

Класс имеет следующие методы:

  1. public bool checkParameters(array $params) - проверяет соответствие переданных параметров правилам контроллера (см. Правила перевода параметров)
  2. public string getStatus() - возвращает статус контроллера. Статус контроллера может сигнализировать об ошибке, например - 404
  3. 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'
)
);
}
}

Свойства

Для более удобного доступа к наиболее используемым объектам, в базовом контроллере предусмотрены следующие свойства:

  1. $this->F - экземпляр фреймворка
  2. $this->T - экземпляр шаблонизатора
  3. $this->Conf - экземпляр компонента Conf

Также вызов любого свойства будет обращено к компоненту Conf, на попытку вызова переменных окружения. То есть, вызов $this->Conf->ENV можно сократить до $this->ENV. Наиболее часто используемые переменные следующие:

  1. $this->PTH - массив путей
    В контроллере имеются дополнительная переменная:
    • $this->PTH->this - путь к текущему контроллеру
  2. $this->URL - массив адресов
    • $this->URL->this - адрес текущего контроллера
    • $this->URL->self - полный текущий адрес
  3. $this->ENV - переменные окружения
    Содержит:
    • $this->ENV->language - имя языка
    • $this->ENV->language_id - ID языка
    • $this->ENV->action - текущее действие контроллера (имя правила перевода параметра)
    • $this->ENV->{$var} - параметры
  4. $this->CNF - конфигурационные данные