Appearance
Модуль для работы с роутингом. realweb.api.route
Совместимость
realweb.api v.6
Модуль предоставляет возможность управлять роутингом на сайте. Включает в себя стандартный ответ для frontend по спецификации
Реализует 2 метода:
- Сущность по URL
/api/entity/ - URL по сущности
/api/link/
Ответ методов стандартизирован под стандартную спецификацию frontend. Модуль предоставляет возможность модифицировать ответ не изменяя код модуля. При реализации роутинга программисту необходимо выполнить следующее:
- Для каждого типа страницы описать сущность этой страницы
- Добавить описанные страницы в роутинг на событии OnBuild
- Добавлять в роутинг страницу 404 нет необходимости, она встроена в модуль*
Пример для главной страницы
php
namespace Realweb\Api\Module\Route\Model\Page;
use Realweb\Api\Module\Content\Model\Element;
use Realweb\Api\Module\Route\Model\Breadcrumb;
use Realweb\Api\Model\Main\Meta;
/**
* Class \Realweb\Api\Module\Route\Model\Page\Index
*/
class Index extends Entity
{
//Сущность, согласно спецификации
public function getCode(): string
{
return 'page-index';
}
//Сущность в базе данных, если есть
public function getEntity(): ?Element\Entity
{
$strPath = "/";
if (!array_key_exists($strPath, $this->_entity)) {
$obEntity = (new \Realweb\Api\Module\Content\Controller\IndexController())
->setParam('path', $strPath)
->getEntity();
if ($obEntity !== null) {
$this->_entity[$strPath] = $obEntity;
}
}
return $this->_entity[$strPath];
}
//Хлебные крошки для страницы
public function getBreadcrumbs(): ?Breadcrumb\Collection
{
return null;
}
//Метатеги для страницы
public function getMeta(): ?Meta\Collection
{
return null;
}
//Модификация результата
public function toJsonEntity(): array
{
$arResult = parent::toJsonEntity();
$arResult['code'] = $this->getEntity()->getCode();
return $arResult;
}
}Добавление роутинга
php
EventManager::getInstance()->addEventHandler('realweb.api.route', 'OnBuild', array('\Realweb\Api\Module\Route\Model\Data', 'onBuild'));php
namespace Realweb\Api\Module\Route\Model;
use Bitrix\Main\Event;
/**
* Class \Realweb\Api\Module\Route\Model\Data
*/
class Data
{
public static function onBuild(Event $obEvent): void
{
Helper::getInstance()
->addRoute(new \Realweb\Api\Module\Route\Model\Page\Index(SITE_DIR))
->addRoute(new \Realweb\Api\Module\Route\Model\Page\Catalog\Element(SITE_DIR . '/catalog/#section_code#/#code#/'))
;
}
}