laravel 路由冲突

Zacla
  • 17

跟着网上视频学习laravel5.4,写了下面两行代码。
Route::get('/posts/{post}','AppHttpControllersPostController@show');

Route::get('/posts/create','AppHttpControllersPostController@create');

然后视频中访问localhost/laravel/public/posts/create 结果是成功的,而我访问却跳转到了show中,求解??

回复
阅读 4.4k
7 个回答
✓ 已被采纳

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


//假设post为int
Route::get('/posts/{post}','AppHttpControllersPostController@show')->where('post', '[0-9]+');
Route::get('/posts/create','AppHttpControllersPostController@create');

我操了,我也是昨天看视频遇到这个问题.页面一片空白. 花了好长时间来找,通过二楼的方式对调一下果然好了.这个垃圾作者.真坑.

代码规范一下哈哈

Route::get('/posts/{post}/show','AppHttpControllersPostController@show')->where('post', '[0-9]+');

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

  • 第一个条路由中的 {post} 是通配,会把 create 作为 {post} 传入到你的AppHttpControllersPostController@show 方法。
  • 最简粗暴单的解决方法,是这两条路由位置对调,create 那条放在第一即可实现。

你这个请求路径也不对啊,这都啥垃圾教程,去看laracsst

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

宣传栏