Как правило, контроллеры, созданные на основе класса waController
, не предназначены для возврата содержимого в ответ на полученный HTTP-запрос и, как правило, лишь выполняют какие-либо действия, скрытые от пользователя, например, обновляют содержимое базы данных, вносят изменения в пользовательские файлы, выполняют запросы к удаленным ресурсам. Однако, если необходимо, то контроллер может вернуть в ответ на запрос любое содержимое с помощью echo
или других аналогичных средств.
Если в ответ на HTTP-запрос необходимо вернуть фрагмент HTML-кода или строку с JSON-ответом, то для этого чаще всего удобно использовать контроллеры, созданные на основе классов waViewAction
, waViewActions
, waViewController
, waJsonController
, waJsonActions
.
См. правила маршрутизации HTTP-запросов в бекенде и во фронтенде.
Основная логика обработки HTTP-запроса должна быть описана в публичном методе execute()
.
Контроллеры и экшены
В продукте допускается наличие контроллера и экшена с одинаковыми сочетаниями module_id
и action_id
. В этом случае контроллер имеет приоритет над экшеном при получении HTTP-запроса, а экшен при получении такого запроса может быть вызван лишь принудительно в коде (этого либо другого) контроллера, когда это необходимо.
Пример такой пары контроллер-экшен:
Методы
-
appSettings
Возвращает значения настроек приложения.
-
configPath
Возвращает путь к директории с конфигурационными файлами приложения.
-
getApp
Возвращает идентификатор приложения, в состав которого входит контроллер.
-
getAppId
Синоним метода getApp.
-
getConfig
Возвращает используемый в данный момент фреймворком экземпляр класса, предназначенного для управления текущей системной конфигурацией.
-
getPluginRoot
Возвращает путь к директории с файлами плагина, в состав которого входит контроллер.
-
getResponse
Возвращает используемый в данный момент фреймворком экземпляр класса, предназначенного для формирования ответа на HTTP-запросы.
-
getRights
Возвращает информацию о правах доступа авторизованного пользователя бекенда.
-
getStorage
Возвращает используемый в данный момент фреймворком экземпляр класса, предназначенного для работы с PHP-сессиями.
-
getUser
Возвращает экземпляр класса, предназначенного для управления авторизованным пользователем бекенда.
-
getUserId
Возвращает идентификатор авторизованного пользователя бекенда.
-
logAction
Сохраняет в системном хранилище информацию о действии пользователя.
-
preExecute
Выполняет произвольные действия до срабатывания основного кода контроллера.
-
redirect
Выполняет перенаправление пользователя на другой URL.
-
storage
Возвращает, изменяет или удаляет значения переменных PHP-сессии.
public function appSettings ($name, $default = '')
Возвращает значения настроек приложения.
Параметры
-
$name
Идентификатор поля настроек.
-
$default
Значение настройки по умолчанию, которое должно быть возвращено в случае отсутствия значения настройки с указанным идентификатором.
Пример
$app_settings = $this->appSettings();
public function configPath ($name, $custom = false)
Возвращает путь к директории с конфигурационными файлами приложения.
Параметры
-
$name
Имя конфигурационного файла.
-
$custom
Флаг, обозначающий необходимость вернуть путь к конфигурационному файлу в пользовательской директории
wa-config/apps/[app_id]/
. По умолчанию возвращается путь к файлу в основной директории с файлами исходного кода приложенияwa-apps/[app_id]/lib/config/
.
Пример
$custom_workflow_config = include $this->configPath('workflow.php
', true);
public function getApp ()
Возвращает идентификатор приложения, в состав которого входит контроллер.
Пример
$app_id = $this->getApp();
public function getConfig ()
Возвращает используемый в данный момент фреймворком экземпляр класса (waSystemConfig
), предназначенного для управления текущей системной конфигурацией.
Пример
$current_domain = $this->getConfig()->getDomain();
public function getPluginRoot ()
Возвращает путь к директории с файлами плагина, в состав которого входит контроллер.
Пример
$plugin_dir = $this->getPluginRoot();
public function getResponse ()
Возвращает используемый в данный момент фреймворком экземпляр класса, предназначенного для формирования ответа на HTTP-запросы.
Пример
$this->getResponse()->redirect($url);
public function getRights ($name = null, $assoc = true)
Возвращает информацию о правах доступа авторизованного пользователя бекенда.
Параметры
-
$name
Строковый идентификатор прав доступа, определенный для указанного приложения. Если не указано, метод вернет все значения прав доступа для данного контакта. Если в конце идентификатора прав доступа добавлен символ %, то значения прав доступа для данного идентификатора будут получены в виде массива. Структура массива формируется в зависимости от значения параметра
$assoc
. -
$assoc
Флаг, использующийся для формирования массива значений множественных прав доступа:
- true (значение по умолчанию): в качестве ключей массива используются идентификаторы полей множественного права доступа, включенных для данного пользователя, а в качестве значений — число 1.
- false: ключи массива нумеруются автоматически начиная с 0, а в качестве значений элементов массива используются идентификаторы полей множественного права доступа, включенных для данного пользователя.
Пример
$can_edit = $this->getRights('edit');
public function getStorage ()
Возвращает используемый в данный момент фреймворком экземпляр класса, предназначенного для работы с PHP-сессиями.
Пример
$my_session_var = $this->getStorage()->get('my_session_var');
public function getUser ()
Возвращает экземпляр класса, предназначенного для управления авторизованным пользователем бекенда.
Пример
$user = $this->getUser();
public function getUserId ()
Возвращает идентификатор авторизованного пользователя бекенда.
Пример
$user_id = $this->getUserId();
public function logAction ($action, $params = null, $subject_contact_id = null, $contact_id = null)
Сохраняет в системном хранилище информацию о действии пользователя.
Параметры
-
$action
Строковый идентификатор действия.
-
$params
Произвольный массив параметров, связанных с данным действием.
-
$subject_contact_id
Числовой идентификатор контакта, по отношению к которому пользователем было выполнено действие.
-
$contact_id
Числовой идентификатор контакта авторизованного пользователя.
Пример
$this->logAction( 'page_edit', [ 'id' => 12, 'name' => 'О компании' ], null, $this->getUserId() );
protected function preExecute ()
Выполняет произвольные действия до срабатывания основного кода контроллера. Этот метод должен быть реализован разработчиком, если необходимо.
public function redirect ($params = [], $code = null)
Выполняет перенаправление пользователя на другой URL.
Параметры
-
$params
URL в виде строки, на который нужно выполнить перенаправление, либо ассоциативный массив GET-параметров для формирования такого URL и перенаправления на него в пределах текущего доменного имени.
-
$code
Код ответа, который должен отдавать сервер при выполнении перенаправления. Если не указан, по умолчанию используется код ответа 302.
Пример
// указание URL в виде строки $this->redirect('https://'.$this->getConfig()->getDomain(), 301); // указание URL в виде массива GET-параметров $this->redirect([ 'module' => 'pages', 'action' => 'edit', 'id' => $page_id, ]);
public function storage ($name)
Возвращает, изменяет или удаляет значения переменных PHP-сессии.
Параметры
-
$name
Строковый идентификатор переменной сессии.
-
$value
Если этот параметр не указан, то метод возвращает значение переменной. Если указано значение
null
, то значение переменной очищается. Если указано иное значение, то оно присваивается переменной.
Пример
//получение значения $this->storage('my_var'); //очистка значения $this->storage('my_var', null); //изменение значения $this->storage('my_var', $new_value);