例えば以下のようなelementがあったとします。
$form->addElement('text', 'address1', '住所', array('size' => 60));
$form->addElement('text', 'address2', '建物・部屋番号', array('size' => 60));
address2にデータが入っているのにaddress1が空白の場合、エラーメッセージを出したいのですがこのような使い方はaddRuleでできますか?
よろしくお願いします。
条件分岐で「getElementValue()」あるいは「getSubmitValue()」でaddress2のフィールドに値が設定されているか判定し、値が設定されている場合に検証ルールを追加するようにしてはいかがでしょうか?
if($form->getElementValue('address2')) { $form->addRule('address1', '住所の入力が必要です', 'required'); }
どちらを利用するかは、フィルタ適用の有無で使い分けると良さそうです。
「getElementValue()」はフィルタリングされていない値になりますが、「getSubmitValue()」はフィルタリングされた値になります。
http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform.getelementvalue.php
http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform.getsubmitvalue.php
【追記】
もう一つの方法ですが、「registerRule()」で独自の検証ルールを登録して、address2の方にaddRuleする事でも可能です。(※空欄はチェックされませんので、address2に追加しています。)
最初の方法の方がシンプルな記述で済みますが・・・
function check_address2($address2, $address1) { if($address2 != '') { if($address1 != '') { return true; } return false; } } $address1 = $form->getElementValue('address1'); $form->registerRule('check_address1', 'callback', 'check_address2'); $form->addRule('address2', '住所の入力が必要です', 'check_address1', $address1);
http://pear.php.net/manual/ja/package.html.html-quickform.intro-validation.php
ご回答ありがとうございます。
2012/03/16 16:00:49> 「getElementValue()」あるいは「getSubmitValue()」
便利なものを教えていただいてありがとうございます。
最初の方は無事動作を確認しました。
しかし、追記の方がカッコいいと思い例題とは別に、『2つのエレメントの内どちらか入力しないとエラーを出す』という方法を試していましたが・・・。
> ※空欄はチェックされませんので
を見落としていました;;
『2つのエレメントの内どちらか入力しないとエラーを出す』の例に関しては最初の方で、他のチェックはregisterRuleで行こうと思います。
ありがとうございました。