Невозможно передать более двух аргументов в маршрут - PullRequest
1 голос
/ 11 мая 2019

У меня есть маршрут, требующий четыре аргумента для использования в методе создания контроллера ресурсов.Однако всякий раз, когда я пытаюсь передать больше двух, в любой комбинации я получаю «Пропущенные обязательные параметры».

Я пробовал оба передать их как массив аргументов с помощью route () или создать URL-адрес.прямо с тем же результатом.Если протестировать его, опустив любой из двух аргументов, определенных для маршрута в web.php, он работает просто отлично (как для route (), так и для прямого URL).

Я посмотрел, но ничего не могу найтина макс на количество аргументов.Но в то же время я не понимаю, почему он принимает 2 аргумента нормально, но останавливается на одном.

Определенный маршрут

Route::get('formicare/{user_slug}/{taskable_name}/{taskable_slug}/tasks/create/{action_name}', 'TaskController@create')->name('tasks.create');
Route::resource('formicare/tasks', 'TaskController', ['except' => ['create']]);

URL в блейде с маршрутом ()

<a class="btn btn-primary" href="{{ route('tasks.create', ['user_slug' => $user->slug, 'taskable_name' => 'colonies', 'taskable_slug' => $colony->slug, 'action_name' => 'give_meal']) }}">
   Meals
</a>

URL в записанном маршруте

<a class="btn btn-primary" href="/formicare/{{$user->slug}}/colonies/{{$colony->slug}}/tasks/create/give_meal">
   Meals 
</a>

Оба из них дают ошибку

Missing required parameters for [Route: tasks.create] [URI: formicare/{user_slug}/{taskable_name}/{taskable_slug}/tasks/create/{action_name}]. (View: C:\laragon\www\antheap\resources\views\colonies\show.blade.php)

Контроллер (пустой для тестирования, но яне думаю, что проблема здесь)

 public function create($user_slug, $taskable_name, $taskable_slug, $action_name)
    {
        dd('halt'); 
    }

Однако, если я сделаю это с меньшим количеством аргументов, обе версии работают, то я отправлю меня в метод контроллера очень хорошо (конечно, после удаления избыточных аргументов вверсия маршрута () для сокращенных аргументов).И я могу переключаться между любыми двумя из четырех аргументов, но всякий раз, когда я пытаюсь добавить третий, он ломается.

Route::get('formicare/{user_slug}/colonies/{taskable_slug}/tasks/create/give_meal', 'TaskController@create')->name('tasks.create');

1 Ответ

0 голосов
/ 11 мая 2019

Вы не можете отправлять запрос контроллеру, поэтому для целей тестирования поставьте вопросительный знак после аргументов, чтобы сделать его необязательным, как показано ниже:

Route::get('formicare/{user_slug?}/{taskable_name?}/{taskable_slug?}/tasks/create/{action_name?}', 'TaskController@create')->name('tasks.create');

и затем в вашем контроллере:

 public function create($user_slug = null, $taskable_name = null, $taskable_slug, $action_name = null)
{
    dd('$user_slug'); 
    dd('$taskable_name'); 
    dd('$action_name'); 
}

Попробуйте Above DD один за другим, чтобы увидеть, какой из ваших запросов имеет результаты, а какой возвращает ноль, что приводит к этой ошибке, тогда вы можете работать над ней лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...