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()
    {

    }
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

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

和顺序有关

5年前 评论

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

5年前 评论

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