6. 表单验证

未匹配的标注

图片验证

在验证上传的图片时,可以指定所需的尺寸。

['photo' => 'dimensions:max_width=4096,max_height=4096']

自定义验证错误的信息

只需在resources/lang/xx/validation.php文件创建适当的数组结构,就可以定义定每个 字段规则语言的验证错误消息。

'custom' => [
     'email' => [
        'required' => 'We need to know your e-mail address!',
     ],
],

用 “now” or “yesterday” 来验证日期

您可以使用 before/after 的规则验证日期,并将各种字符串作为参数传递,比如: tomorrow, now, yesterday。例如: 'start_date' => 'after:now'。它在底层下使用 strtotime ()。

$rules = [
    'start_date' => 'after:tomorrow',
    'end_date' => 'after:start_date'
];

具有某些条件的验证规则

如果验证规则依赖于某些条件,则可以通过将 withValidator() 添加到 FormRequest 类中来修改规则,并在那里指定自定义逻辑。例如,如果您只想为某些用户角色添加验证规则。

use Illuminate\Validation\Validator;
class StoreBlogCategoryRequest extends FormRequest {
    public function withValidator(Validator $validator) {
        if (auth()->user()->is_admin) {
            $validator->addRules(['some_secret_password' => 'required']);
        }
    }
}

更改默认验证消息

如果要更改特定字段和特定验证规则的默认验证错误消息,只需将 messages() 方法添加到 FormRequest 类中。

class StoreUserRequest extends FormRequest
{
    public function rules()
    {
        return ['name' => 'required'];
    }

    public function messages()
    {
        return ['name.required' => 'User name should be real name'];
    }
}

预验证

如果你想在默认的 Laravel 验证之前修改某个字段,或者,换句话说,“准备”那个字段, FormRequest 类中有一个方法 prepareForValidation () :

protected function prepareForValidation()
{
    $this->merge([
        'slug' => Illuminate\Support\Str::slug($this->slug),
    ]);
}

第一次验证错误时停止

默认情况下,将在列表中返回 Laravel 验证错误,检查所有验证规则。但是如果你想要在第一个错误之后停止这个过程,使用验证规则叫做 bail :

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

不使用 validate() 或者 Form Request 就抛出422

如果您不使用 validate ()或 Form Request,但仍然需要使用相同的422状态码和错误结构抛出错误,那么可以手动抛出 throw ValidationException::withMessages() :

if (! $user || ! Hash::check($request->password, $user->password)) {
    throw ValidationException::withMessages([
        'email' => ['The provided credentials are incorrect.'],
    ]);
}

规则取决于其他条件

如果您的规则是动态的并且依赖于其他条件,那么您可以动态地创建该规则数组。

    public function store(Request $request)
    {
        $validationArray = [
            'title' => 'required',
            'company' => 'required',
            'logo' => 'file|max:2048',
            'location' => 'required',
            'apply_link' => 'required|url',
            'content' => 'required',
            'payment_method_id' => 'required'
        ];

        if (!Auth::check()) {
            $validationArray = array_merge($validationArray, [
                'email' => 'required|email|unique:users',
                'password' => 'required|confirmed|min:5',
                'name' => 'required'
            ]);
        }
        //
    }

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel-tips/8....

译文地址:https://learnku.com/docs/laravel-tips/8....

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:3
讨论数量: 0
发起讨论 只看当前版本


暂无话题~