我的网址是:www.foo.com/some-bar-slug-here/page
如果在上面显示的 slug 中找到字符串“bar”,我无法获得捕获路径:
Route::any('{myslug}/page/', array('as'=>'bar-page', 'uses'=>'Controllers\MyBar@index'))
->where('myslug','/bar/');
如果我使用正则表达式 [0-9A-Za-z\-]+
它有效,但它不适用于 /bar/
。有什么想法吗?
最佳答案
我使用 ^([0-9A-Za-z\-]+)?bar([0-9A-Za-z\-]+)?
因此更新后的路由代码如下所示:
Route::any('{myslug}/page/', array('as'=>'bar-page', 'uses'=>'Controllers\MyBar@index'))
->where('myslug','^([0-9A-Za-z\-]+)?bar([0-9A-Za-z\-]+)?');
奖励:为了使其不区分大小写,我这样做:^([0-9A-Za-z\-]+)?(?i)bar([0-9A-Za-z\- ]+)?
注意:如果您在路由文件中进一步使用此路由的副本,但要搜索不同的子字符串,那么您需要将 {myslug}
命名为不同的名称像 {myslug2}
,否则 Laravel 不会运行所有的路由。
关于php - 使用正则表达式匹配 Laravel 路由中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198019/