В PHP маршрутизация klein будет соответствовать как можно большему количеству маршрутов. 2 настроенных мной маршрута противоречат друг другу. Они есть:
$route1: '/websites/[i:websiteId]/users/[i:id]?'
а также
$route2: '/websites/[i:websiteId]/users/[a:filename].[json|csv:extension]?'
Это URL-адрес, который я пытаюсь сопоставить, который, я думаю, должен соответствовать первому, а не второму:
/api/v1-test/websites/100/users/4
Регулярное выражение, созданное для этих двух:
$regex1: `^/api(?:/(v1|v1-test))/websites(?:/(?P<websiteId>[0-9]++))/users(?:/(?P<id>[0-9]++))?$`
$regex2: `^/api(?:/(v1|v1-test))/websites(?:/(?P<websiteId>[0-9]++))/users(?:/(?P<filename>[0-9A-Za-z]++))(?:\.(?P<extension>json|csv))?$`
Я имею в виду, чтобы он не совпадал, если нет '.csv' или '.json'. Проблема в том, что он соответствует обоим маршрутам. Для второго результирующего имени файла будет «4», а расширение будет пустым.
Отправка /api/v1-test/websites/100/users/users.csv работает правильно и соответствует только второму маршруту.
У меня есть контроль только над маршрутом, а не регулярным выражением или соответствием. Спасибо.
0 or 1
метасимвол. 15.04.2013?
. 15.04.2013/api/v1-test/websites/100/users/test
? (и вы хотите, чтобы он разветвлялся в этом случае?) 15.04.2013