Laravel 路由解析和顺序有关吗?

Route::get('/posts','\App\Http\Controllers\PostController@index');
Route::get('/posts/create','\App\Http\Controllers\PostController@create');
Route::post('/posts','\App\Http\Controllers\PostController@store');
Route::get('/posts/{post}','\App\Http\Controllers\PostController@show');
Route::get('/post/{post}/edit','\App\Http\Controllers\PostController@edit');
Route::put('/posts/{post}','\App\Http\Controllers\PostController@update');
Route::get('/posts/delete','\App\Http\Controllers\PostController@delete');

以上是正确的路由 但是为什么在我把第四行的路由换到第二行 也就是

Route::get('/posts','\App\Http\Controllers\PostController@index');
Route::get('/posts/{post}','\App\Http\Controllers\PostController@show');
Route::get('/posts/create','\App\Http\Controllers\PostController@create');
Route::post('/posts','\App\Http\Controllers\PostController@store');

Route::get('/post/{post}/edit','\App\Http\Controllers\PostController@edit');
Route::put('/posts/{post}','\App\Http\Controllers\PostController@update');
Route::get('/posts/delete','\App\Http\Controllers\PostController@delete');

这样之后,通往正确路由的就不对了 create解析到了show,show解析到了index,以下是控制器代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class PostController extends Controller
{
    //列表
    public function index()
    {
        echo 2;exit;
        return view('post/index');
    }

    public function show()
    {
        echo 1;exit;
        return view('post/show');
    }

    public function create()
    {

        return view('post/create');
    }

    public function store()
    {

    }

    public function edit()
    {
        return view('post/edit');
    }

    public function update()
    {

    }

    public function delete()
    {

    }
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

有关系,Route::get('/posts/{post}','\App\Http\Controllers\PostController@show');会把Route::get('/posts/create','\App\Http\Controllers\PostController@create');覆盖掉,因为create也可以匹配到{post},你可以试试给{post}加正则限制,应该就可以避免createshow的覆盖

6年前 评论
讨论数量: 2
leo

和顺序有关

6年前 评论

有关系,Route::get('/posts/{post}','\App\Http\Controllers\PostController@show');会把Route::get('/posts/create','\App\Http\Controllers\PostController@create');覆盖掉,因为create也可以匹配到{post},你可以试试给{post}加正则限制,应该就可以避免createshow的覆盖

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!