Как передать несколько параметров в маршрут именованных ресурсов laravel

#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.

Спасибо