汎用バリデーションライブラリとして Zend\InputFilter を使います。
http://framework.zend.com/manual/2.3/en/modules/zend.input-filter.intro.html
Composer でインストール
{
"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
のメッセージが指定できます。
<?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 を利用しましたが、多くのルールが標準で実装されています。これらが利用できる場合は、こちらを使うのが良いでしょう。