m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

FuelPHPでフォームのラジオボタンでのバリデーションが「Validation rule in_array failed for ~」が出ちゃう→array_key_existsで解決

 ラジオボタンを設置してからというもの、$fieldset->validation()->run()で必ず「Validation rule in_array failed for ~」ってのがラジオボタンの組の数だけ表示されてしまって困ってます。
 例によって「viewform」使ってます。

// 金額入力切替
$fieldset->add_radio('tanka_or_sougaku', '単価/総額', array(
	'tanka' => '単価',
	'sougaku' => '総額'
));

って書いてますけども。 どこかおかしいかな?
【解決編は続きに】
 ちなみに、同じことを本来のFieldsetの書き方に直しても同じエラーが。

$ops = array(
	'tanka' => '単価',
	'sougaku' => '総額',
);
$fieldset->add('tanka_or_sougaku', '単価/総額', array('options' => $ops, 'type' => 'radio', 'value' => 'tanka'))->add_rule('in_array', $ops);

 そこでソースを読み始めます。
 viewform/classes/validation.php の中に、_validation_in_array() なんてありませんし、core/classes/validation.php にも _validation_in_array() はありません。 原因はこれでしょうか。
 ラジオボタンの検証として、ラジオボタンのoptionsに指定した項目以外が指定されたらエラー検出するっていうことのはずなので、他の事例を探したところ、ありました。
 「FuelPHPでフォーム作成2(Fieldset) - Validation - BTT's blog」さんでは、array_key_existsってのを与えてますね。 あれ、どういうことだろう。 PHP標準の配列関数「array_key_exists」のことですよね。
 今回の場合、ラジオボタンの値として受け取るのは「単価」「総額」じゃなくて「tanka」「sougaku」の方です。 viewformではadd_rule('in_array', ~) を使っているけどこれは値があるかどうかのチェックだから、適切なのは array_key_exists ってことなのかな。
 ひとまず、viewform/classes/fieldset.php の該当箇所を in_array でなく array_key_exists に書き換えて使ってみます。