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;
}