【问题标题】:problem with dash character in the Laravel routingLaravel 路由中的破折号问题
【发布时间】:2020-11-18 15:27:57
【问题描述】:

我的路线中有这段代码:

Route::get('/{lang}/post/{id}-{slug?}',function($lang, $id, $slug=null) {
    dd($lang, $id, $slug);
})->where('id', '[0-9]+');

site.com/en/post/30 -> 工作

site.com/en/post/30-myslug -> 工作

site.com/en/post/30- -> 404

为什么会出现 404 错误? slug 是可选的。

如果我将破折号替换为另一个字符,例如“i”

Route::get('/{lang}/post/{id}i{slug?}',function($lang, $id, $slug=null) {
    dd($lang, $id, $slug);
})->where('id', '[0-9]+');

site.com/en/post/30i 工作

破折号有什么限制吗?

Laravel 5.8

真诚的

【问题讨论】:

  • 问题在于,如果在路由参数之后出现以下字符之一:/,;.:-_~+*=@|,,您不能在该路由参数中使用它,因为 Laravel 会调整正则表达式以排除该参数。
  • @STA,感谢您的 inf,我通过向 slug 添加正则表达式来解决问题!

标签: laravel laravel-5 routes


【解决方案1】:

我可以通过将它添加到我的路线来修复它:

->where('slug', '(.*)');

现在,site.com/en/post/30- 工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2016-01-17
    相关资源
    最近更新 更多