log > fuelphp/validationで独自のルールを追加する

fuelphp/validationで独自のルールを追加する

fuelphp/validationには、配列のvalidationがない。そのため、フォームから配列形式でチェックするためには独自のルールを追加する必要があった。

で、他のRuleのソースを読むと、Fuel\Validation\AbstractRuleを継承して作っていたのでそのようにしたらうまくいった。

以下は、フォームからIDを配列(ids[])で渡す際、IDがすべて英数字かどうかをチェックするサンプル。

<?php
// ArrayRule.php

namespace App\Rule;

class ArrayRule extends \Fuel\Validation\AbstractRule
{
    protected $message = 'エラーです';

    public function validate($value, $field = null, $allFields = null)
    {
        if (count($value) === 0) {
            return false;
        }

        foreach ($value as $i => $val) {
            if (preg_match('/[0-9a-zA-Z]/', $val) == false) {
                return false;
            }
        }

        return true;
    }
}
public function validation($input)
{
    $val = $this->validate;
    $val->addCustomRule('arrayRule', '\App\Rule\ArrayRule');
    $val->addField('ids', 'ID')
               ->arrayRule()
                   ->setMessage('IDは必須です。');

    $result = $this->validate->run($input);

    return $result;
}