2016-08-16 2 views
0

Итак, im с использованием регулярного выражения для обработки параметров на моем маршруте, но я не могу сделать 2 правила на моем page var для совместной работы. Вот мой кодLaravel Route Regex Альтернативное правило не работает

Route::get('/{page}', 'Backend\[email protected]')->where(['type' => 'blog|site', 'page' => '^add$|^[0-9]+$']); 

Edit: (правило маршрута внутри группы маршрутов, для некоторых, кто задается вопросом, где type вар пришел, его от родительской группы маршрутов)

я хочу принять либо строка "add", либо integers, но, похоже, она принимает только первое выражение (я попытался заменить позицию выражения, только первые работы).

Любая идея, в чем проблема? так как у моего type var также есть регулярное выражение, чтобы принять 2 слова. Im runnin на Laravel 5.2, и я только начинаю с laravel. Благодаря

Update

пытался

Route::get('/{page}', 'Backend\[email protected]')->where(['type' => 'blog|site', 'page'=>'^add$|^test$']);

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

+0

Maybe ' 'регулярного выражения:/^ (add | [0-9] +) $/''поможет (то же самое с' 'regex:/blog | site /''). –

+0

'Route :: get ('/ {page}', 'Backend \ PageController @ viewPage') -> где (['type' => 'regex:/blog | site /']);' this does not work :(@Wiktor Stribiżew –

ответ

0

Laravel маршрутизатор (наследуя Symfony маршрутизатор) adds начало и конец анкеров (^, $) соответственно каждому из них, где ограничение регулярного выражения при удалении любого existing ones. Если альтернативы используются в регулярном epxression |, тогда весь шаблон заключен в круглые скобки.

Так что в вашем случае последней компиляции RegEx будет что-то вроде этого:

#^/(?:add$|^[0-9]+)$#s 

FYI первой слэш / поймана от самого маршрута. Теперь, если вы взглянете на то, что приносит вам этот RegEx, вы заметите, что в середине шаблона находится неуместная каретка ^, которая обозначает начало, и этого никогда не произойдет.

Решения будет изменить свой RegEx к этому:

add|[0-9]+ 

который будет составлен для:

#^/(?:add|[0-9]+)$#s 

Larave маршруту:

Route::get('/{page}', 'Backend\[email protected]') 
    ->where(['page' => 'add|[0-9]+']); 
+0

Спасибо @revo! Я пробовал свой шаблон регулярного выражения на тестировщиках регулярных выражений в Интернете, и он показывает, что он работает. Никогда не думал, что на ларавеле иначе будет обработано иначе –

Смежные вопросы