我在网址中有一个ID。就像这样
http://mysite.test/category/subcategory/title-13
现在在Laravel。
我想在我的web.php路由文件中解析URL的这一部分,以便我可以检测并在函数中传递它们。
category/subcategory/title-13
和路线必须是这样的。
Route::get('{category}/{subcategory_slug}/{slug}-{id}/', 'ItemsController@item')
我尝试了这个,但是没有用。由于“-”
,这里的标题也带有短划线(-)。像
http://mysite.test//jobs/articles/get-your-dream-job-16
答案 0 :(得分:4)
您的slug
占位符会消耗掉下一个斜杠之前的所有内容,包括-
,因此其余占位符永远不会匹配。
Laravel使您可以添加自己的模式,以与占位符using the where
method相匹配。
如果您将slug
的模式设置为排除-
字符,则它应该可以正常工作。
Route::get('{category}/{subcategory_slug}/{slug}-{id}/', 'ItemsController@item')
->where('slug', '[^-]+');
如果您的slug
本身包含破折号,则可以使用前瞻性来确保始终至少剩下一个破折号:
Route::get('{category}/{subcategory_slug}/{slug}-{id}/', 'ItemsController@item')
->where('slug', '.+(?=-)');