Vesthelm Engine

2.1.4 Руководство пользователя

Класс Контроллер

Класс Контроллер управляет классами: Модель, Представление, а также любые другие ресурсы, необходимые для обработки 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'));
    }

}