Роутинг в бекенде

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

В текущей версии фреймворка маршрутизация запросов в бекенд не конфигурируется и подчиняется жёстким правилам (которые тем не менее могут быть переопределены внутри приложения).

Бекенд всех приложений находится в адресном пространстве http://{ДОМЕННОЕ_ИМЯ}/{ПУТЬ_К_ФРЕЙМВОРКУ}/webasyst/*. Бекенд каждого приложения находится в адресном пространстве http://{ДОМЕННОЕ_ИМЯ}/{ПУТЬ_К_ФРЕЙМВОРКУ}/webasyst/{APP_ID}/*, где APP_ID — это идентификатор приложения.

Соответствие между URL запроса и классом и методом, вызываемым для обработки запроса, определяет класс — фронт-контроллер. По умолчанию (если в приложении не определен свой индивидуальный фронт-контроллер) используется системный класс waFrontController, который работает по описанным ниже правилам.

Логика работы системного фронт-контроллера

Страницы приложения доступны по адресу вида /webasyst/{APP_ID}/[?module=MODULE][&action=ACTION][&ДОПОЛНИТЕЛЬНЫЕ_ПАРАМЕТРЫ]. Системный фронт-контроллер waFrontController запускает конкретный модуль и экшен приложения, основываясь на значениях параметров module и action, полученных из GET-запроса. Оба параметра (module и action) являются необязательными, и в случае их отсутствия применяются правила выбора класса и метода по умолчанию. Значение по умолчанию для параметра modulebackend. Системный фронт-контроллер waFrontController ищет для исполнения класс и метод в соответствии с правилами, описанными в разделе «Правила и рекомендации по именованию».

Примеры соответствия URL и вызовов методов модулей

Порядок поиска методов для обработки запроса на гипотетическом примере приложения с идентификатором myblog:

/webasyst/myblog/

  1. myblogBackendController->execute()
  2. myblogBackendActions->defautAction()
  3. myblogBackendAction->execute()

/webasyst/myblog/?module=mail

  1. myblogMailController->execute()
  2. myblogMailActions->defautAction()
  3. myblogMailAction->execute()

/webasyst/myblog/?module=mail&action=test

  1. myblogMailTestController->execute()
  2. myblogMailActions->testAction()
  3. myblogMailTestAction->execute()

Система ищет класс и метод в указанной последовательности и запускает первый, который нашла.

Переопределение правил маршрутизации в бекенде

Если правила маршрутизации в бекенде вашего приложения требуют изменения правил по умолчанию, необходимо переопределить фронт-контроллер для вашего приложения. Для этого создайте свой класс, унаследованный от класса waFrontController. Логику маршрутизации реализуйте в методе dispatch.

Затем добавьте в файл wa-apps/{APP_ID}/lib/config/factories.php строку вида

'front_controller' => 'НАЗВАНИЕ_ВАШЕГО_КЛАССА'

Например, если ваш фронт-контроллер называется myblogFrontController, то содержимое файла factories.php должно выглядеть следующим образом:

<?php

return array(
    ...
    'front_controller' => 'myblogFrontController',
);