Using a regex to match a substring in a Laravel route

假装没事ソ 提交于 2019-12-10 07:33:42

问题


My URL is: www.foo.com/some-bar-slug-here/page

I can't get a route to catch if the string "bar" is found in the slug shown above:

Route::any('{myslug}/page/', array('as'=>'bar-page', 'uses'=>'Controllers\MyBar@index'))
     ->where('myslug','/bar/');

If I use the regex expression [0-9A-Za-z\-]+ it works, but it doesn't work for /bar/. Any ideas?


回答1:


I got it working with ^([0-9A-Za-z\-]+)?bar([0-9A-Za-z\-]+)?

So the updated route code looks like this:

Route::any('{myslug}/page/', array('as'=>'bar-page', 'uses'=>'Controllers\MyBar@index'))
 ->where('myslug','^([0-9A-Za-z\-]+)?bar([0-9A-Za-z\-]+)?');

Bonus: To make it case insensitive, I do this: ^([0-9A-Za-z\-]+)?(?i)bar([0-9A-Za-z\-]+)?

Note: If you are using a copy of this route further down in the your routes file, but searching for a different sub-string then you will need to name your {myslug} to something different like {myslug2}, otherwise Laravel will not run all of the routes.



来源:https://stackoverflow.com/questions/27198019/using-a-regex-to-match-a-substring-in-a-laravel-route

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!