我有两条路线:
/route/{id}
/route/add
第一个显示基于id提供的内容,第二个提供添加新闻项的形式。我的问题是,当我点击/route/add
时,它会接受添加词并将其视为第一条路线的ID。
在laravel中是否有任何解决方案,或者我必须使用不同的路径名称?
答案 0 :(得分:3)
路线以先到先得的方式运作。首先查看较早的路线。由于您在这两条路线中的第一条路线上有一个通配符{id}
,因此Laravel将add
视为{id}
并将传递给该控制器/闭包。
您应该像这样切换两条路线:
Route::get('route/add', 'Controller@method');
Route::get('route/{id}', 'Controller@method');
或者你总是可以在第一条路线上添加过滤器,以告诉Laravel {id}
应该是一个数字:
Route::get('route/{id}', 'Controller@method')->where('id', '[0-9]+');
Route::get('route/add', 'Controller@method');
这样,Laravel会尝试将add
与您的{id}
通配符匹配,但会失败,因为add
不是数字。
答案 1 :(得分:0)
请更换两行:
/route/add
/route/{id}
{id}
参数并不总是期望数值。字符串也有效,例如“add”。