为了账号安全,请及时绑定邮箱和手机立即绑定

laravel 路由冲突

laravel 路由冲突

PHP
慕运维8079593 2019-03-16 15:03:25
跟着网上视频学习laravel5.4,写了下面两行代码。Route::get('/posts/{post}','AppHttpControllersPostController@show'); Route::get('/posts/create','AppHttpControllersPostController@create'); 然后视频中访问localhost/laravel/public/posts/create 结果是成功的,而我访问却跳转到了show中,求解??
查看完整描述

7 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

加一个正则表达式限制就好了,默认情况下,laravel 的路由匹是从上往下的,匹配到符合的第一条后,就不会往下匹配了:


//假设post为int
Route::get('/posts/{post}','AppHttpControllersPostController@show')->where('post', '[0-9]+');
Route::get('/posts/create','AppHttpControllersPostController@create');
查看完整回答
反对 回复 2019-03-18
?
慕斯王

TA贡献1864条经验 获得超2个赞

你的第一个路由{post} 里面的内容可以看做是任意要匹配的 比如是create 你的第一个路由是可以替代第二个路由写法的

查看完整回答
反对 回复 2019-03-18
?
千万里不及你

TA贡献1784条经验 获得超9个赞

  • 第一个条路由中的 {post} 是通配,会把 create 作为 {post} 传入到你的AppHttpControllersPostController@show 方法。
  • 最简粗暴单的解决方法,是这两条路由位置对调,create 那条放在第一即可实现。
查看完整回答
反对 回复 2019-03-18
?
慕容708150

TA贡献1831条经验 获得超4个赞

楼主将create的路由放到show的上面就好了

查看完整回答
反对 回复 2019-03-18
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

代码规范一下哈哈

Route::get('/posts/{post}/show','AppHttpControllersPostController@show')->where('post', '[0-9]+');
查看完整回答
反对 回复 2019-03-18
  • 7 回答
  • 0 关注
  • 628 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信