You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 手动实例化FormRequest调用validated()返回null错误问询

问题根源
  • Laravel 的 FormRequest 类依赖服务容器自动解析触发验证流程,你直接手动new StoreCarRequest($t)实例化的操作,只会初始化请求参数,不会自动执行验证逻辑,验证器未初始化的情况下调用validated()方法,自然会抛出空对象成员方法调用错误。
  • 你当前跨控制器调用方法的写法本身也不符合Laravel的最佳实践,容易出现此类依赖缺失的问题。
解决方案

方案1:手动触发FormRequest验证流程

如果要保留现有跨控制器调用的写法,只需要修改CarItalianController的store方法,手动执行FormRequest的验证流程即可:

class CarItalianController extends Controller
{
    public function store(StoreCarItalianRequest $request)
    {
        $input_parameters = $request->validated();
        $t = [
            'model' => $input_parameters['modello'],
            'door' => $input_parameters['porte'],
        ];
        // 用容器实例化FormRequest,完成初始化
        $storeCarRequest = app(StoreCarRequest::class)->replace($t);
        // 手动触发验证逻辑
        $storeCarRequest->validateResolved();
        return (new CarController)->store($storeCarRequest);
    }
}

方案2(更推荐):提取公共业务逻辑

建议把车辆创建的逻辑抽成独立的服务类,避开手动处理FormRequest的坑,同时提升代码复用性:

  1. 新增CarService服务类
class CarService
{
    public function createCar(array $validatedData)
    {
        return Car::create($validatedData);
    }
}
  1. 修改CarController
class CarController extends Controller
{
    public function store(StoreCarRequest $request, CarService $carService)
    {
        return $carService->createCar($request->validated());
    }
}
  1. 修改CarItalianController
class CarItalianController extends Controller
{
    public function store(StoreCarItalianRequest $request, CarService $carService)
    {
        $input_parameters = $request->validated();
        $t = [
            'model' => $input_parameters['modello'],
            'door' => $input_parameters['porte'],
        ];
        return $carService->createCar($t);
    }
}

内容的提问来源于stack exchange,提问作者vlauciani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:57:02