Laravel-从URL获取ID并解析带有破折号(-)的URL

时间:2019-05-01 23:37:42

标签: laravel

我在网址中有一个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

1 个答案:

答案 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', '.+(?=-)');