Класс Контроллер¶
Класс Контроллер управляет классами: Модель, Представление, а также любые другие ресурсы, необходимые для обработки HTTP запроса и формирования веб-страниц.
Что такое контроллер?¶
Контроллер просто файл класса или файл с именем, который может быть связан с унифицированным идентификатором ресурса (URI):
http://www.example.com/index.php/bulletin-board/add-bulletin/
В приведенном выше примере, Vesthelm Engine будет пытаться найти контроллер с именем Add_Bulletin.php в каталоге applications/bulletin_board/frontend/controllers и запустить его.
Также контроллер может быть файл и Vesthelm Engine будет пытаться найти файл контроллера с именем add-bulletin.php в каталоге applications/bulletin_board/frontend/files.
Создание контроллера¶
Допустим, вы хотите создать приложение доски объявлений. У вас может быть класс контроллера, который будет выводить страницу добавления объявления. Вот пример класса контроллера:
defined('V_IN_FRONTEND') or die('Powered by <a href="http://www.vesthelm.com/">Vesthelm EE</a>');
class Bulletin_Board_Add_Bulletin_Controller extends Vesthelm_Controller {
public function execute() {
$this->output();
}
public function output() {
$this->View->assign('title', 'Название страницы');
$this->View->display('add-bulletin'); //вывод файла шаблона
}
}
Функция execute() выполняется всегда, когда запущен контроллер с помощью функции: $this->bulletin_board->Bulletin_Controller->run()
Анатомия контроллера¶
Классы контроллеров расположены в каталогах:
//Контроллеры сайта
example.com/frontend/controllers
example.com/acp/controllers
//Контроллеры приложений
example.com/applications/{имя_приложения}/frontend/controllers
example.com/applications/{имя_приложения}/acp/controllers
//Контроллеры дополнений
example.com/addons/{имя_дополнения}/frontend/controllers
example.com/addons/{имя_дополнения}/acp/controllers
//Иногда контроллеры можно найти здесь (старый способ):
example.com/addons/{имя_дополнения}/frontend/files
example.com/addons/{имя_дополнения}/acp/files
Базовый прототип для контроллера:
class Enhancement_Name_Controller_Name_Controller extends Vesthelm_Controller {
public function execute() {}
}
Enhancement_Name - имя приложения. Имена приложений должны начинаться с заглавной буквы после символа _ подчеркивания.
Controller_Name - имя контроллера. Имена контроллеров должны начинаться с заглавной буквы после символа _ подчеркивания. Убедитесь, что ваш класс наследует базовый класс контроллера (Vesthelm_Controller).
Имя файла будет таким же, как имя класса (Controller_Name). Например, если ваш класс:
class Bulletin_Board_Add_Bulletin_Controller extends Vesthelm_Controller {
public function execute() {}
}
Ваш файл будет:
example.com/applications/bulletin-board/acp/controllers/Add_Bulletin.php
//или
example.com/applications/bulletin-board/acp/controllers/add-bulletin/Add_Bulletin.php
Вызов контроллера¶
$Add_Bulletin_Controller = $this->bulletin_board->Add_Bulletin_Controller;
bulletin_board - имя приложения и Add_Bulletin - имя контроллера.
Запуск контроллера¶
Чтобы вручную запустить контроллер:
$this->bulletin_board->Add_Bulletin_Controller->run();
bulletin_board - имя приложения и Add_Bulletin - имя контроллера.
Что такое действие контроллера?¶
Контроллер просто файл класса или файл с именем, который может быть связан с унифицированным идентификатором ресурса (URI):
http://www.example.com/index.php/bulletin-board/bulletin/add
Другие примеры: Получение имя действия
В приведенном выше примере, Vesthelm Engine будет пытаться найти действие контроллера с именем Bulletin_Add.php в каталоге applications/bulletin_board/frontend/controllers/bulletin/ и запустить.
Также действие контроллера может быть файл и Vesthelm Engine будет пытаться найти файл действия контроллера с именем add.php в каталоге applications/bulletin_board/frontend/files/actions/bulletin/post/.
Создание действия контроллера¶
Сначала нужно создать класс модели действия с именем Bulletin, который будет содержать все действия контроллера и поля с именами, как в модели действия: Создание модели действия
Контроллер:
defined('V_IN_FRONTEND') or die('Powered by <a href="http://www.vesthelm.com/">Vesthelm EE</a>');
class Bulletin_Board_Bulletin_Controller extends Vesthelm_Controller {
public function execute() {
$this->control(); //управляет действиями контроллера... действие по умолчанию - вызов функции output()
}
public function output() {
$this->View->assign('title', 'Название страницы');
$this->View->display('add-bulletin');
}
}
Функция control() используется для управления действиями контроллера, если никаких действий не будет найдено контроллер запустит функцию output().
Действие контроллера:
defined('V_IN_FRONTEND') or die('Powered by <a href="http://www.vesthelm.com/">Vesthelm EE</a>');
class Bulletin_Board_Bulletin_Add_Controller extends Vesthelm_Controller {
public function execute() {
$this->output();
}
public function output() {
$this->Output->json(array('key' => '123'));
}
}