waController

Обработка HTTP-запросов без обязательного возврата ответа

Содержание...

Как правило, контроллеры, созданные на основе класса 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);