You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel路由参数冲突:/post/new被识别为{id}触发index方法

解决Laravel路由匹配优先级问题

你遇到的问题其实是Laravel路由的匹配顺序导致的——Laravel会按照你定义路由的先后顺序去匹配请求,当你先定义Route::get('/post/{id}', ...)时,它会把new当成{id}参数的值,自然就走到了index方法。

完全不用修改路径,只需要调整一下路由的定义顺序,把/post/new的路由放在/post/{id}前面就行:

// 先定义固定路径的路由
Route::get('/post/new', 'PostController@create');
// 再定义带参数的路由
Route::get('/post/{id}', 'PostController@index');

这样当请求mysite.com/post/new时,Laravel会先匹配到前面的固定路由,直接导向create方法;而其他类似/post/1、/post/abc的请求才会匹配到带{id}参数的路由,走index方法。

另外,如果你想更严谨一点,还可以给{id}参数添加路由约束,比如限制它只能是数字,这样即使顺序没调整,new(字符串)也不会被匹配成id参数,示例代码如下:

Route::get('/post/{id}', 'PostController@index')->where('id', '[0-9]+');
Route::get('/post/new', 'PostController@create');

不过更推荐第一种调整顺序的方式,因为更直观,也能覆盖更多场景(比如你的id可能允许字符串的情况)。

内容的提问来源于stack exchange,提问作者Casey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:31:54