Редактирование, отображение и удаление маршрута не работает с использованием 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);
}

введите описание изображения здесь


person Community    schedule 02.10.2018    source источник
comment
Я думаю, что с вашим route:list что-то не так, так как у вас есть маршруты типа admin/roles/{}. Он должен содержать {role} вместо {}, также имя должно быть roles.index и т. Д., Но затем вы загружаете представление _6 _...   -  person Harry    schedule 02.10.2018


Ответы (1)


Вам следует попробовать открыть в браузере admin/roles/1 вместо admin/roles/show/1. Маршрут, который вы пробовали, не существует, поэтому вы правильно получаете ошибку 404.

Поскольку страницы создания и индексации работают нормально, но не отображаются, я думаю, что с привязками маршрутов что-то не так.

Поскольку маршруты в команде route:list показывают admin/roles/{}, это заставляет меня думать, что laravel не может определить привязки.

Я думаю, это проверить ядро ​​http. У вас должно быть промежуточное ПО \Illuminate\Routing\Middleware\SubstituteBindings::class либо в массиве $middleware, либо внутри группы web под массивом $middlewareGroups. Я предлагаю поместить его в группу web промежуточного программного обеспечения.

eg:

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'), чтобы исправить имена

person Harry    schedule 02.10.2018
comment
Получите страницу, не найденную с этим. example.test / admin / roles / create работает. - person ; 02.10.2018
comment
индексная страница также работает. Кстати, спасибо за редактирование моего сообщения. - person ; 02.10.2018
comment
Я думаю, что ключ к разгадке заключается в том, что работают и index, и create, и ваш route:list возвращает admin/roles/{} маршруты вместо admin/roles/{role}. Я отредактировал свой ответ другим предложением - person Harry; 02.10.2018
comment
С вашим вторым предложением страница показа работает, но страница редактирования все еще не работает. Отсутствуют обязательные параметры для [Маршрут:] [URI: admin / roles / {role}] resources \ views \ admin \ roles \ edit.blade.php - person ; 02.10.2018
comment
SubstituteBindings есть как в middlewareGroups, так и в routeMiddleware. - person ; 02.10.2018
comment
Теперь работает. Это было что-то с моей страницей edit.blade.php. У меня было действие формы = {{действие ('RoleController @ update'). Это должно быть действие = {{действие ('RoleController @ update, $ role- ›id') - person ; 02.10.2018