Laravel整数字段过滤报错:Function name must be string 求助
解决Laravel中"Function name must be a string"错误
嘿,这个问题其实是个很容易修正的小语法失误,咱们来快速搞定它:
错误原因分析
你在orders方法里已经通过参数注入了Request实例$request,但却错误地把它当成函数来调用了——$request()->has('orderstatus_id')这种写法是不对的!$request是一个对象,不是可调用的函数,PHP自然会抛出"Function name must be a string"的错误。
对比你users方法里的写法,你用的是request()(Laravel的全局辅助函数),而在orders里混淆了注入的Request对象和全局request辅助函数的用法。
两种解决办法
办法一:使用注入的Request对象调用方法
直接把$request()->has()改成$request->has()(去掉对象后面的括号),因为$request是Request实例,直接调用它的has方法即可:
public function orders(Request $request) { if ($request->has('orderstatus_id')) { $orders = Order::where('user_id', '=', Auth::user()->id) ->where('orderstatus_id', $request->input('orderstatus_id')) ->paginate(5) ->appends('orderstatus_id', $request->input('orderstatus_id')); } else { $orders = Order::where('user_id', '=', Auth::user()->id)->get(); } return view('front.orders', compact('orders')); }
办法二:统一使用全局request()辅助函数
和你users方法的写法保持一致,把$request()->has()改成request()->has(),用全局辅助函数来检查请求参数:
public function orders(Request $request) { if (request()->has('orderstatus_id')) { $orders = Order::where('user_id', '=', Auth::user()->id) ->where('orderstatus_id', request('orderstatus_id')) ->paginate(5) ->appends('orderstatus_id', request('orderstatus_id')); } else { $orders = Order::where('user_id', '=', Auth::user()->id)->get(); } return view('front.orders', compact('orders')); }
额外优化建议
因为orderstatus_id是整数类型,建议做个类型转换让代码更严谨,避免传入非整数参数导致的问题:
- 可以用
$request->integer('orderstatus_id')来直接获取整数类型的参数 - 或者手动转换:
(int)$request->input('orderstatus_id')
另外,还可以重构代码减少重复逻辑,让它更简洁:
public function orders(Request $request) { // 先初始化基础查询 $ordersQuery = Order::where('user_id', Auth::user()->id); // 有筛选条件时追加查询 if ($request->has('orderstatus_id')) { $ordersQuery->where('orderstatus_id', $request->integer('orderstatus_id')); $orders = $ordersQuery->paginate(5)->appends(['orderstatus_id' => $request->integer('orderstatus_id')]); } else { $orders = $ordersQuery->get(); } return view('front.orders', compact('orders')); }
内容的提问来源于stack exchange,提问作者mafortis
相关产品推荐
相关产品推荐

