1

我正在尝试设置一个基本的 Laravel 9 CRUD 应用程序,但我无法让编辑路由为用户控制器工作。

路线/web.php

Route::get('/dashboard', function () { return view('dashboard'); })
    ->middleware(['auth'])->name('dashboard');

use App\Http\Controllers\UserController;

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

require __DIR__.'/auth.php';

用户控制器.php

class UserController extends Controller
{
    function edit(int $id)
    {
        echo 123;
    }

我收到 404 NOT FOUND 页面

在此处输入图像描述

另外,为什么我看不到此错误的堆栈跟踪?

另外,在一些示例中,我看到有人在控制器方法声明中使用模型类名作为参数类型,例如:

function edit(User $id)
{
    echo 123;
}

但是,我也看到了其他使用int的示例。那么哪个是正确的呢?

4

2 回答 2

3

首先,在你的 .env 过滤器中你应该放

APP_ENV=local
APP_DEBUG=true

并将您的 web.php 更改为:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/dashboard', function () { return view('dashboard'); })->middleware(['auth'])->name('dashboard');

use App\Http\Controllers\UserController;

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

require __DIR__.'/auth.php';

然后,尝试运行

php artisan route:list

并检查您的路线是否正确。

并尝试删除用户文件中的中间件,也许您没有登录页面,它会将您重定向到那里。

确保您在正确的网址中,例如localhost/user/1/edit

于 2022-03-01T12:45:25.530 回答
2

路线中的参数不带起始${$id}将路线中所有出现的 更改为 just {id}

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

更多关于路由参数

编辑:您可能还想看看Resource Controllers。类似的东西Route::resource('users', UserController::class);将管理所有必需的路线

于 2022-03-01T12:47:11.997 回答