Skip to content

Модуль для работы с роутингом. 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#/'))
		;
	}
}

Пример реализации

Репозиторий

Репозиторий модуля