#php #laravel #laravel-5 #laravel-routing #resource-router-middleware
#php #laravel #laravel-5 #laravel-маршрутизация #ресурс-маршрутизатор-промежуточное программное обеспечение
Вопрос:
У меня есть именованный маршрут. Я хочу передать два параметра в действие ‘edit’ (например, {id}
и {month}
).
Я пытался передать параметры через массив, но все еще не работает.
Route::resource('admin/worktimes', 'WorktimesController')->names([
'index' => 'worktimes',
'show' => 'worktimes.show',
'create' => 'worktimes.create',
'edit' => 'worktimes.edit',
'store' => 'worktimes.store',
'update' => 'worktimes.update'
])
{{ route('admin/worktimes', array($id, $month) }}
Созданный URL-адрес ‘http://…/admin/worktimes/4/edit?month=2019-05‘. Я хочу иметь что-то вроде ‘http://…/admin/worktimes/4/2019-05/edit‘.
Комментарии:
1. Это полное определение маршрута? Содержит ли он еще какую-либо информацию о сопоставленных переменных? На первый взгляд, вам не хватает ключей в вашем массиве параметров
Ответ №1:
вы не можете получить желаемый результат с resource
создайте Route('admin/worktimes/{id}/{month}/edit','WorktimesController@edit')
и в вашем контроллере метод редактирования будет выглядеть public function edit($id,$month){
//your code
}
Ответ №2:
Метод ресурсов по умолчанию не допускает множественных параметров при редактировании.
это автоматически сгенерированные URL-адреса из маршрута ресурса.
и если нам нужно изменить их, то, должно быть, потребуется изменить какую-то основную функцию маршрутизации laravel.
и это будет не очень хорошей идеей. потому что это повлияло на все маршруты редактирования проекта.
итак, мы просто перезаписываем маршрут редактирования ресурса нашим правилом маршрута.
Route::get('admin/worktimes/{id}/{month}/edit', ['as' => 'worktimes.edits', 'uses' => 'WorktimesController@edit']);
Это правило должно быть записано после маршрута ресурса, написанного для worktimesController в route.php.
Спасибо