我有一条路线,要求在资源控制器的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');
答案 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导致该错误,然后您可以对其进行更好的处理。