使用Laravel 5.7进行路线编辑,显示和删除不起作用

时间:2018-10-02 09:54:44

标签: 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);
}

enter image description here

1 个答案:

答案 0 :(得分:0)

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

由于创建和索引页面可以正常工作,但我的路线绑定没有显示出来。

由于route:list命令中的路由显示为admin/roles/{},所以我认为laravel无法找出绑定。

对此,我最好的猜测是检查http内核。您应该在\Illuminate\Routing\Middleware\SubstituteBindings::class数组中或$middleware数组下的web组中拥有$middlewareGroups中间件。我建议将其放在web中间件组中。

例如:

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')来固定名称