laravel 路由冲突

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

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

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

慕运维8079593
浏览 629回答 7
7回答

慕少森

加一个正则表达式限制就好了,默认情况下,laravel 的路由匹是从上往下的,匹配到符合的第一条后,就不会往下匹配了: //假设post为int Route::get('/posts/{post}','AppHttpControllersPostController@show')->where('post', '[0-9]+'); Route::get('/posts/create','AppHttpControllersPostController@create');

慕斯王

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

千万里不及你

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

慕容708150

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

蓝山帝景

代码规范一下哈哈 Route::get('/posts/{post}/show','AppHttpControllersPostController@show')->where('post', '[0-9]+');
打开App,查看更多内容
随时随地看视频慕课网APP