Laravel项目TicketController出现ArgumentCountError参数错误求助
解决Laravel中ArgumentCountError: Too few arguments错误
你遇到的ArgumentCountError是因为控制器方法的参数顺序错误导致的,具体原因和修复方案如下:
问题根源
Laravel的依赖注入规则是:需要框架自动注入的类(比如Request)必须放在路由参数的前面。你当前的控制器方法参数顺序是$type = '', Request $request,而路由定义了可选参数{type?},当请求触发时,Laravel会把路由参数(type的值)传给方法的第一个参数,而Request类无法被正确注入,导致方法实际只收到1个参数,但期望接收2个,从而抛出参数不足的错误。
修复步骤
只需要调整控制器方法的参数顺序,把Request $request移到路由参数$type的前面即可:
修改后的控制器代码:
public function tickets(Request $request, $type = ''){ $arr = [ 'Seller Request', 'I want to become a seller', 'seller request', 'Seller request', ]; if ($request->word){ $tickets = Ticket::where('id',trim($request->word))->orderByDesc('id')->paginate(100); return view('admin.layouts.tickets.index',compact('tickets')); } switch ($type){ case '': $tickets = Ticket::where('status','1')->where('from_support',null)->whereNotIn('title',$arr)->orderByDesc('id')->paginate(100); break; case 'Seller Request': $tickets = Ticket::where('status','1')->whereIn('title',$arr)->orderByDesc('id')->paginate(100); break; case 'from support': $tickets = Ticket::where('status','1')->where('from_support','1')->orderByDesc('id')->paginate(100); break; } return view('admin.layouts.tickets.index',compact('tickets')); }
说明
调整参数顺序后,Laravel会先自动注入Request实例,再处理路由的可选参数$type,不管请求时是否传入type值,方法都能正确接收参数,解决参数数量不匹配的问题。你的路由配置Route::get('tickets/{type?}','TicketController@tickets')->name('admin-tickets')是正确的,无需修改。
内容的提问来源于stack exchange,提问作者Yahia VIP
相关产品推荐
相关产品推荐

