LoginSignup
8
8

More than 5 years have passed since last update.

Zend\InputFilter クロージャを使ったカスタムバリデーション

Last updated at Posted at 2014-10-04

汎用バリデーションライブラリとして Zend\InputFilter を使います。
http://framework.zend.com/manual/2.3/en/modules/zend.input-filter.intro.html

Composer でインストール

composer.json
{
    "require": {
        "zendframework/zend-inputfilter": "~2.3"
    }
}

インストールします。

$ composer install

クロージャを使ったカスタムバリデーション

Zend\InputFilter でクロージャを使ったカスタムバリデーションを実装します。

クロージャを使ったカスタムバリデーションを実装するには、Callback バリデータを利用します。

下記が、実装例です。

validators キーの要素となる連想配列にて、name キーで callback を指定しています。これで Zend\Validator\Callback クラスを利用することになります。

options キーでは、必要なパラメータを渡します。

callback キーが、バリデーションを実行するクロージャです。引数にバリデーションを行う値が代入されるので、bool 値で結果を返します。

messages キーがエラーメッセージの指定です。これは、エラーの原因毎にメッセージが指定できるので、ここでは、値がバリデーションに適合しなかった事を表す Zend\Validator\Callback::INVALID_VALUE のメッセージを設定しています。Zend\Validator\Callback クラスでは、他にバリデーションでエラーが発生したことを示す Zend\Validator\Callback::INVALID_CALLBACK のメッセージが指定できます。

zend.php
<?php
require_once __DIR__ . '/vendor/autoload.php';

use Zend\InputFilter\Factory;

$factory = new Factory();
$inputFilter = $factory->createInputFilter([
    'values' => [
        'required' => true,
        'validators' => [
            [
                'name' => 'callback',
                'options' => [
                    'callback' => function($value) {
                        return is_array($value);
                    },
                    'messages' => [
                        \Zend\Validator\Callback::INVALID_VALUE => '配列じゃない!',
                    ],
                ],
            ]

        ],
    ],
]);

$inputs = [
    'values' => 1, // not array!
];

$inputFilter->setData($inputs);
if ($inputFilter->isValid()) {
    echo 'valid' . PHP_EOL;
} else {
    print_r($inputFilter->getMessages());
}

では、実行してみます。出力値を見ると、エラーメッセージに対象フィールドと、バリデーションが適合しなかった原因がキーとして示されており、エラーメッセージが格納されています。

$ php zend.php
Array
(
    [values] => Array
        (
            [callbackValue] => 配列じゃない!
        )

)

Zend\InputFilter(Zend/Validator)で実装されているバリデーションルール

ここでは、汎用的な Callback を利用しましたが、多くのルールが標準で実装されています。これらが利用できる場合は、こちらを使うのが良いでしょう。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8