Многоязычная маршрутизация Altorouter

можно ли использовать Altorouter для создания многоязычной настройки маршрутизации? Я бы хотел отправить переменную с целевым файлом (чтобы при просмотре она отображала другое содержимое), например -

$router->map('GET','/th/work/sample', 'work/sample.php', 'sample', 'th');

но этот пятый параметр недоступен. Есть ли обходной путь для этого?

2 ответов


вы можете использовать сопоставление шаблонов в URL-адресе для достижения этого, если URL-адреса вашего языка достаточно регулярны.

по словам документация, определив маршруту

$router->map('GET', '/[:lang]/work/sample', 'work/sample.php', 'sample')

захватят 'th' на $lang когда '/th/work/sample' URL-адреса нажмите. Если вам нужно более сложное сопоставление шаблонов, можно также указать пользовательские регулярные выражения.


$router->map('GET','/th/work/sample', 'work/sample.php', 'sample', 'th');

но этот пятый параметр недоступен. Есть ли обходной путь для этого?

это потому, что функция карта просто не поддерживает пятый параметр.

public function map($method, $route, $target, $name = null)

исходный код AltoRouter.php: map

можно назвать match функция, проходящая по исходному маршруту, Если вы можете каким-то образом перехватить и заставить свой код работать перед маршрутизатором. Этот функция match возвращает вам имя маршрута. Но это означает, что вы создаете именованные маршруты для каждого языка, а затем вы начнете ценить решение, предоставленное @gbe

$router->map('GET', '/[:lang]/work/sample', 'work/sample.php', 'sample')