假设有两个 Laravel API 资源Book
和Author
,每个资源都有一些验证store
请求的规则。
然后,还有第三个 API 资源,API 使用者可以在其中发布特定内容以及 aBook
和 an Author
。也就是说,store
请求必须接受一个Book
对象、一个Author
对象和第三个FooBar
对象:
// sample POST body
{
"book": {...book object...},
"author": {...author object...},
"foobar": {...foobar object...}
}
在FooBarRequest
验证中,重用andrules()
是有意义的,但它不起作用: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 的自定义规则,但它并没有太大帮助,因为该passes
方法必须返回一个布尔值(即我们应该为每个属性重新编写所有验证逻辑)。
有没有优雅/官方的方式来做到这一点?