47

laravel 5でリクエストを検証するためにフォームリクエスト検証メソッドを使用しています.フォームリクエスト検証メソッドを使用して独自の検証ルールを追加したいと思います.私のリクエストクラスは以下のとおりです.フィールドアイテムでカスタム検証numeric_arrayを追加したい.

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

私のカスタム機能を以下に示します

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

laravel5のフォームリクエストの検証について、この検証方法をどのように使用できますか?

4

9 に答える 9

50

上記の答えは正しいですが、多くの場合、特定のフォーム リクエストに対してのみカスタム検証を作成したい場合があります。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',
        ];
    }
}
于 2015-07-14T23:01:27.413 に答える
3

配列項目を検証するためにバリデーターを拡張する必要はありません。配列の検証でわかるように、「*」を使用して配列の各項目を検証できます。

protected $rules = [
      'shipping_country' => ['max:60'],
      'items' => ['array'],
      'items.*' => 'integer'
];
于 2016-08-29T16:11:32.070 に答える