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

Laravel Scribe生成API文档时未读取FormRequest的bodyParameters内容

解决Scribe不读取FormRequest中bodyParameters配置的问题
  • 确认Scribe版本与FormRequest方法兼容性
    若使用Scribe v3.x,需确保bodyParameters()方法返回格式正确的关联数组:

    public function bodyParameters(): array
    {
        return [
            'customer_id' => [
                'description' => '关联的客户ID',
                'example' => 123,
            ],
            'customer_email_ids' => [
                'description' => '需要通知的客户邮箱ID列表',
                'example' => [456, 789],
            ],
        ];
    }
    

    若为v4.x版本,Scribe改用fields()定义描述、examples()定义示例值:

    public function fields(): array
    {
        return [
            'customer_id' => '关联的客户ID',
            'customer_email_ids' => '需要通知的客户邮箱ID列表',
        ];
    }
    
    public function examples(): array
    {
        return [
            'customer_id' => 123,
            'customer_email_ids' => [456, 789],
        ];
    }
    
  • 检查Scribe配置是否启用FormRequest解析
    打开config/scribe.php,确保extractors.requests中包含FormRequestExtractor且优先级靠前:

    'extractors' => [
        'requests' => [
            \Knuckles\Scribe\Extracting\Extractors\FormRequestExtractor::class,
            // 其他提取器...
        ],
    ],
    

    若有自定义提取器排在前面,会覆盖FormRequest的配置,调整顺序即可。

  • 清除Scribe缓存并重新生成文档
    修改配置后需清除缓存再生成,避免旧数据干扰:

    php artisan scribe:clear
    php artisan scribe:generate
    
  • 确认API路由与FormRequest的关联
    检查路由是否直接注入StoreInvoiceRequest,而非手动获取参数:

    // 路由定义
    Route::post('/invoices', [InvoiceController::class, 'store']);
    
    // 控制器方法
    public function store(StoreInvoiceRequest $request)
    {
        // 业务逻辑
    }
    

    未直接注入的话,Scribe不会读取FormRequest的配置。

  • 排查是否有其他配置覆盖参数
    若控制器方法中用了@bodyParam注解,或路由通过->bodyParameters()定义了参数,这些配置会优先于FormRequest,需移除冲突内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:39:58