Laravel 路由解析为不同的方法

Laravel route resolving to a different method

我正在尝试设置一个基本的 Laravel CRUD 应用程序,但我无法为每个操作设置页面。

当我访问路线 case/create 时,它会打开 show 的页面。

routes/web.php

use App\Http\Controllers\HospitalCase as HospitalCase;

Route::controller(HospitalCase::class)->group(function() {
    Route::get('/cases','index')->middleware('auth')->name('cases');
    Route::get('/case/{id}','show')->middleware('auth');
    Route::get('/case/create','create')->middleware('auth');
    Route::post('/case/create','store')->middleware('auth');
    Route::get('/case/edit/{$id}','edit')->middleware('auth');
    Route::post('/case/edit/{$id}','update')->middleware('auth');
    Route::get('/case/delete/{$id}','destroy')->middleware('auth');
});

HospitalCase.php控制器

class HospitalCase extends Controller
{
    function index()
    {
        echo 'index';
    }

    function create()
    {
        echo 'create';
    }

    function show($id)
    {
        echo 'show';
    }

    function store()
    {
        // validation rules
    }

    function edit($id)
    {
        return view('case/edit');
    }

    function update($id)
    {
    }

    function destroy($id)
    {
    }
}

这是我在浏览器上看到的:

几个小时以来我一直在努力解决这个问题,但想不出我做错了什么。

PS: auth 中间件正在使用 laravel breeze(未修改)

它显示表演路线的原因是因为您定义了

Route::get('/case/{id}','show')->middleware('auth');

在它之前,因此,它匹配 case/create 作为 show('create')

之后尝试定义路线。

Route::get('/case/create','create')->middleware('auth');
Route::post('/case/create','store')->middleware('auth');
Route::get('/case/{id}','show')->middleware('auth');

只是想重申@TimLewis 的建议,我认为你需要放置这条路线:

Route::get('/case/create','create')->middleware('auth');

这条路线上方:

Route::get('/case/{id}','show')->middleware('auth');

但是你可以尝试使用Laravel的路由资源,这样你就不需要写出所有的路由 -

use App\Http\Controllers\HospitalCaseController;

Route::resource('case', HospitalCaseController::class);