【发布时间】:2020-05-02 10:34:23
【问题描述】:
假设有两个 Laravel API 资源 Book 和 Author,每个资源都有一些验证 store 请求的规则。
然后,还有第三个 API 资源,API 使用者可以在其中发布特定内容以及 Book 和 Author。也就是说store请求必须接受一个Book对象,一个Author对象,以及第三个FooBar对象:
// sample POST body
{
"book": {...book object...},
"author": {...author object...},
"foobar": {...foobar object...}
}
在FooBarRequest 验证rules() 中,重用BookRequest::rules() 和AuthorRequest::rules() 是有意义的,但它不起作用:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class FooBarRequest extends FormRequest
{
public function rules()
{
$bookRules = BookRequest::$validationRules;
$authorRules = AuthorRequest::$validationRules;
return [
'book' => $bookRules,
'authorRules' => $authorRules,
'foobar' => 'required|...some rules...'
];
}
}
也许使用 Laravel 的 custom rules,但它没有太大帮助,因为 passes 方法必须返回一个布尔值(即我们应该为每个属性重新编写所有验证逻辑)。
有没有优雅/官方的方式来做到这一点?
【问题讨论】:
标签: laravel validation laravel-formrequest