Добрый день.
Подключил на проект роутинг
Подключил как рекомендуется в документации
Мой файл web.php
При попытке сгенерировать ссылки. На странице /events/test все хорошо.
При попытке сгенерировать ссылки на других страницах получаем TypeError
Получается - если файл или раздел существуют, то .htaccess файл не подключил файл /bitrix/routing_index.php и генерация ссылок не отрабатывает.
Если, подключить
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/routing_index.php');
в шапке, а не только для отсутствующих файлов, все будет работать
Но в этом способе смущает, что в скрипте, в ветке else, если нет совпадения с маршрутом подключается urlrewrite файл и на каждом хите будет обрабатываться. В прошлых версиях мы так никогда не делали.
Вопрос, как правильно использовать генерацию ссылок на любых страницах проекта?
Подключил на проект роутинг
Подключил как рекомендуется в документации
| Код |
|---|
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !/bitrix/routing_index.php$
RewriteRule ^(.*)$ /bitrix/routing_index.php [L]
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
# RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
# RewriteRule ^(.*)$ /bitrix/urlrewrite2.php [L] |
Мой файл web.php
| Код |
|---|
return function (RoutingConfigurator $routes) {
// маршруты
$routes->get('/events/{CODE}/',
new PublicPageController('/events/detail.php')
)->name('eventDetail');
$routes->get('/foo/',
new PublicPageController('/foo/detail.php')
)->name('foo');
$routes->post('/bar/',
new PublicPageController('/bar/detail.php')
)->name('bar');
}; |
При попытке сгенерировать ссылки. На странице /events/test все хорошо.
| Код |
|---|
$router = \Bitrix\Main\Application::getInstance()->getRouter();
$url = $router->route('eventDetail', ['CODE' => 'hello-link']); // /events/hello-link/
$url1 = $router->route('foo'); // /foo/
$url2 = $router->route('bar'); // /bar/ |
При попытке сгенерировать ссылки на других страницах получаем TypeError
| Код |
|---|
[TypeError] Return value of Bitrix\Main\Application::getRouter() must be an instance of Bitrix\Main\Routing\Router, null returned (0) /home/bitrix/ext_www/sevdev.webdev.rarus-crimea.ru/bitrix/modules/main/lib/application.php:175 #0: Bitrix\Main\Application->getRouter() /home/bitrix/ext_www/sevdev.webdev.rarus-crimea.ru/index.php:17 |
Получается - если файл или раздел существуют, то .htaccess файл не подключил файл /bitrix/routing_index.php и генерация ссылок не отрабатывает.
Если, подключить
include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/routing_index.php');
в шапке, а не только для отсутствующих файлов, все будет работать
Но в этом способе смущает, что в скрипте, в ветке else, если нет совпадения с маршрутом подключается urlrewrite файл и на каждом хите будет обрабатываться. В прошлых версиях мы так никогда не делали.
Вопрос, как правильно использовать генерацию ссылок на любых страницах проекта?