如何在 Laravel 5 中使用表单请求验证时添加自定义验证规则

我正在使用表单请求验证方法在 laravel 5 中验证请求。我想使用表单请求验证方法添加自己的验证规则。我的请求类如下。我想添加带有字段项的自定义验证numeric_array。

  protected $rules = [
      'shipping_country' => ['max:60'],
      'items' => ['array|numericarray']
];

我的 cusotom 函数如下所示

 Validator::extend('numericarray', function($attribute, $value, $parameters) {
            foreach ($value as $v) {
                if (!is_int($v)) {
                    return false;
                }
            }
            return true;
        });

如何在 laravel5 中将此验证方法与关于表单请求验证一起使用?


答案 1

虽然上述答案是正确的,但在很多情况下,您可能希望仅为某个表单请求创建自定义验证。您可以利用 laravel FormRequest 并使用依赖关系注入来扩展验证工厂。我认为这个解决方案比创建服务提供商要简单得多。

这是如何做到的。

use Illuminate\Validation\Factory as ValidationFactory;

class UpdateMyUserRequest extends FormRequest {

    public function __construct(ValidationFactory $validationFactory)
    {

        $validationFactory->extend(
            'foo',
            function ($attribute, $value, $parameters) {
                return 'foo' === $value;
            },
            'Sorry, it failed foo validation!'
        );

    }

    public function rules()
    {
        return [
            'username' => 'foo',
        ];
    }
}

答案 2

像你一样使用实际上完全没问题,你只需要把它放在一个这样的服务提供商中:Validator::extend()

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ValidatorServiceProvider extends ServiceProvider {

    public function boot()
    {
        $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
        {
            foreach ($value as $v) {
                if (!is_int($v)) {
                    return false;
                }
            }
            return true;
        });
    }

    public function register()
    {
        //
    }
}

然后,通过将提供程序添加到列表中来注册提供程序:config/app.php

'providers' => [
    // Other Service Providers

    'App\Providers\ValidatorServiceProvider',
],

现在,您可以在任何需要的位置使用验证规则numericarray


推荐