Обновить

Комментарии 18

Где примеры с middleware?

В документации ))))))

В статье намного больше смысла чем в Вашем комментарии.
Не поленился ещё раз проверить, если статья про роутинг то и вопрос про middleware в роуторе, а не итерпритации(ActionFilter) в контроллере.

Во-первых, в статье нет смысла, так как это просто копи-паст документации с элементами комментариев.

Во-вторых, очень жаль что вы не поняли стёб.

В-третьих, если вам нужно использовать middleware в контексте роута, а документации нет - открываете исходный код и построчно вникаете в логику (именно так люди и делают, когда отсутствует документация). Здесь middleware это повторение laravel, поэтому если вы с ним работали, для вас не составит труда его использовать.

В данный момент они не используется и вся логика привычных middleware отдана на откуп экшен фильтрам.

Интересно вы конечно делаете (пытаетесь скрестить битрикс, ларавель и симфони). Статья ни о чем - вроде бы «переходите на новый роуминг и отказываетесь от urlrewrite.php», но ни слова как это подружить с компонентами, с Эрмитажем, да хоть просто со страницами. Ни слова что добавили урезанный до невозможности view(). Да, все это есть в документации, тогда для чего бессмысленная статья? Просто напишите еще один пост как скормили ИИ весь свой код чтобы она за вас написала документацию. Так ждал Битрикс Framework 2.0, но о нем ни слуху не духу. В общем, разработчики на битрикс, хотите что-то придумать и сделать обратную совместимость со старым роумингом, но в тоже время полностью отказаться от него - копайте кишки ядра (это возможно, у меня получилось, но костыли вам обеспечены)

Интересно вы конечно делаете (пытаетесь скрестить битрикс, ларавель и симфони).

Не обижайте Yii , он тоже хороший доннор для скрещивания :)

но ни слова как это подружить с компонентами, с Эрмитажем, да хоть просто со страницами. Ни слова что добавили урезанный до невозможности view(). Да, все это есть в документации, тогда для чего бессмысленная статья?

Статья про роутинг, а не про "всё на свете". Не переживайте, про работу с контроллерами статья будет.

(это возможно, у меня получилось, но костыли вам обеспечены)

Нельзя скрывать такое творчество от общественности, с нетерпеньем жду от вас статью с деталями ;)

Нельзя скрывать такое творчество от общественности, с нетерпеньем жду от вас статью с деталями ;)

Не времени чтобы писать статьи)) Вот костыльная реализация, которую можно доработать при желании. Но суть думаю понятна.

->get('/blog/{page}/', function (Route $route) {

            $res = \Bitrix\Main\UrlRewriter::getList(
                SITE_ID,
                ['QUERY' => '/blog/'],
                ['SORT' => 'ASC']
            )[0];

            $path = $res['PATH'];
            $uri = new \Bitrix\Main\Web\Uri('/blog/');
            parse_str($uri->getQuery(), $queryParams);

            $GLOBALS['PAGEN_1'] = $route->getParameterValue('page');

            if ($queryParams) {
                $_SERVER["QUERY_STRING"] = Bitrix\Main\Web\Uri::urnEncode($uri->getQuery(), false);
                foreach ($queryParams as $name => $value) {
                    $route->getParametersValues()->set($name, $value);
                    $_REQUEST[$name] = $value;
                    $_GET[$name] = $value;
                }
            }

            $_SERVER["REAL_FILE_PATH"] = $path;

            include_once $_SERVER['DOCUMENT_ROOT'] . $path;
        })

А чем вас стандартный PublicPageController не устроил? :)

class PublicPageController
{
	protected $path;

	public function __construct($path)
	{
		$this->path = $path;
	}

	public function __invoke()
	{
	}

	/**
	 * @return mixed
	 */
	public function getPath()
	{
		return $this->path;
	}
}

Серьезно ?:)))))) Думаю отвечать не нужно чем не устроил - код говорит за меня)

Ну, а вы не думали посмотреть как он используется? ;)

Конечно я смотрел) но логика урезанная. И это конечно сильно - если это PublicPageController то делай магию. Моя магия хотя бы работает в отличии от PublicPageController.

Ещё бы route() учитывал правила из where(), цены бы ему не было.
А то возможность сделать вот так - есть, согласно документации:
$routes->any('/test/{test}/', function ($test) {         die(var_dump('it work'));     })         ->where('test', '.*')         ->name('test');

Но при этом
\Bitrix\Main\Application::getInstance()->getRouter()->route('test', ['test' => 'a/b/c/d'])
Возвращает /test/a%2Fb%2Fc%2Fd/

Довольно странный пример, потому что очень похоже что вместо отдельных роутов вы хотите сделать какой-то один динамический. Ну и в целом ваша «проблема» решается использованием разделителя между abcd, который поддерживается URL строкой

Возможно, однако правила  ->where('test', '.*') это часть официальной документации, а не какая-то моя выдумка.
Разделитель поддерживается любой другой, но SEO и руководство требует слэши.

Метод “where” определяет правила маршрутизации. При генерации эти правила не учитываются, тк регулярку вы можете любую навертеть.

Касаемо SEO, накиньте пожалуйста контекста где именно требуются слеши, и почему нельзя использовать что-то кроме них.

Ну, например SECTION_CODE_PATH :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.bitrix24.ru
Дата регистрации
Дата основания
1998
Численность
501–1 000 человек
Местоположение
Россия