路由不能传递两个以上的参数

时间:2019-05-11 09:40:10

标签: laravel

我有一条路线,要求在资源控制器的create方法中使用四个参数。但是,每当尝试通过两个以上的任意组合时,都会出现“缺少必需参数”的情况。

我尝试过使用route()将它们作为参数数组传递,或者直接构造具有相同结果的url。如果通过下拉到web.php中为该路由定义的任何两个参数进行测试,它就可以正常工作(对于route()和直接url)。

我看过了,但是我找不到最大数量的参数。但是同时,我不明白为什么要花两个参数很好,却又不肯一个。

定义的路线

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']]);

刀片中带有route()的网址

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

写出的路线中的网址

<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()版本中删除了多余的参数之后)。而且我可以在四个参数中的任何两个之间切换,但是每当我尝试添加第三个参数时,它就会中断。

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

1 个答案:

答案 0 :(得分:0)

您可能不会将请求发送到控制器,因此出于测试目的,在参数后面加上问号以使其变为可选,如下所示:

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'); 
}

一个一个地尝试上述DD,以查看哪个请求有结果,哪个返回null导致该错误,然后您可以对其进行更好的处理。