有很多情况下你可能觉得这是必需的。
比如,假设你正在为一个项目构建REST API。你决定在更新请求方法中不需要对请求中的任何字段进行必填验证(因为可能有很多参数,你不想传递所有参数来更改一个字段,或者你没有所有的字段权限)。那么如何处理UpdatePostRequest.php类中的验证呢?你可以按照代码中给出的方式,在rules()
方法中设置所有验证规则。
此外,可能还需要满足两个或多个请求字段值的总和大于或小于某个阈值的要求。那么怎么办呢?
你可以在控制器中进行检查并从那里重定向,但这是否会违背创建专用请求类的目的呢?我认为控制器应该简洁明了,不应该基于验证而有多个退出点。这些小的验证检查可以在请求类本身中处理,例如创建新的规则、扩展自己的自定义验证或创建后验证钩子,它们在Laravel中都有其独特的用法。
因此,你可能希望在这里创建一个验证钩子,其任务是检查请求是否为空,就像下面的示例所示:
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (empty($this->toArray())) {
$validator->errors()->add('body', 'Request body cannot be empty');
}
if (!$this->validateCaptcha()) {
$validator->errors()->add('g-recaptcha-response', 'invalid');
}
});
}
以下是完整的IT技术示例:
<?php
namespace App\Http\Requests\Posts;
use App\Helpers\General\Tables;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UpdatePostRequest extends FormRequest
{
public function authorize()
{
return auth()->user()->can('update-post', $this);
}
public function rules()
{
return [
'name' => ['string', 'min:3', 'max:255'],
'email' => ['string', 'email', 'min:3', 'max:255'],
'post_data' => ['string', 'min:3', 'max:255'],
];
}
public function withValidator($validator)
{
$validator->after(function ($validator) {
if (empty($this->toArray())) {
$validator->errors()->add('body', 'Request body cannot be empty');
}
});
}
}
谢谢..
exists
规则确实非常有用,节省了很多时间。 - Sy Tran