首页 > 解决方案 > 使用 laravel 5.7 的路线编辑、显示和删除不起作用

问题描述

尝试获取这些页面时,我没有找到所有页面。

web.php看起来像这样

Route::resource('admin/roles', 'RoleController');

route:list看起来像这样

| GET|HEAD  | admin/roles         | index   | App\Http\Controllers\RoleController@index   
| GET|HEAD  | admin/roles/create  | create  | App\Http\Controllers\RoleController@create  
| PUT|PATCH | admin/roles/{}      | update  | App\Http\Controllers\RoleController@update  
| GET|HEAD  | admin/roles/{}      | show    | App\Http\Controllers\RoleController@show    
| DELETE    | admin/roles/{}      | destroy | App\Http\Controllers\RoleController@destroy 
| GET|HEAD  | admin/roles/{}/edit | edit    | App\Http\Controllers\RoleController@edit    

控制器看起来像这样

public function show($id)
{
    $role = Role::find($id);
    return view('admin.roles/show')->with('role',$role);
}

public function edit($id)
{
    $role = Role::find($id);
    return view('admin.roles.edit')->with('role',$role);
}

在此处输入图像描述

标签: laravel-5.7

解决方案


您应该尝试将浏览器导航到admin/roles/1而不是admin/roles/show/1. 您尝试的路线不存在,因此您正确收到 404 错误。

由于创建和索引页面工作正常,但没有显示,我认为路由绑定有问题。

由于route:list命令 show中的路线admin/roles/{},这让我觉得 laravel 无法弄清楚绑定。

我对此的最佳猜测是检查 http 内核。您应该在数组中或数组下的组中拥有\Illuminate\Routing\Middleware\SubstituteBindings::class中间件。我建议把它放在中间件组中。$middlewareweb$middlewareGroupsweb

例如:

protected $middlewareGroups = [

    //

    'web' => [
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    //
];

另一个建议:

尝试单独定义路线而不是使用Route::resource()

Route::get('admin/roles', 'RoleController@index');
Route::get('admin/roles/create', 'RoleController@create');
Route::patch('admin/roles/{role}', 'RoleController@update');
Route::get('admin/roles/{role}', 'RoleController@show');
Route::delete('admin/roles/{role}', 'RoleController@delete');
Route::get('admin/roles/{role}/edit', 'RoleController@edit');

请注意,您可能需要添加->name('some-name')以修复名称


推荐阅读