2011-10-23 6 views
3

私は、ユーザーデータを含むフォーム、特に電話番号フィールドの作業を行っています。モデルの唯一の妥当性検査ルールがusphoneルールであるため、通常は電話番号は必須ではありません。ただし、ユーザーがこのフォームを送信している場合は、電話番号が必要になります。 validateルールをオンザフライで追加し、モデルを設定してvalidatesメソッドを呼び出すことができると思っていましたが、間違っているか、期待通りに動作していません。私のコントローラでオンザフライでの検証ルールの変更

エラーが報告されていない
# Update a few validation rules that are specific to this context 
$this->Proposal->Requestor->validate['phone_number']['notempty'] = array(
    'rule'  => 'notEmpty', 
    'message' => 'Please enter a phone number so can can contact you with any questions about the work.', 
    'allowEmpty' => false, 
    'required' => true, 
); 

$validationErrors = array(); 
$this->Proposal->Requestor->set($this->data['Requestor']); # $this->data['Requestor']['phone_number'] only (no other requestor data) 
if(!$this->Proposal->Requestor->validates(array('fieldList' => array('phone_number')))) { 
    $validationErrors['Requestor'] = $this->Proposal->Requestor->validationErrors; 
} 

、私は電話番号フィールドを空のままにしても。この場合、ユーザーから要求している唯一の情報は自分の電話番号なので、Requestorデータの残りは空ですが、残りのユーザーデータをマージしようとしましたが、同じ結果が得られます。 fieldListオプションを削除すると、別のフィールドでエラーが発生しますが、空の電話番号には何も表示されません。

私はここで何が不足していると思いますか?私はこれで今何時間も猿を弄ってきました。私は正しい答えを見つけられませんでした。

ありがとうございました。

答えて

2

ソリューションが二重になってしまっ:

  1. 私は、米国の電話番号であることを値を強制phone_numberフィールド上の既存のルールを持っていました。このルールは、allowEmptytruerequiredからfalseに設定しています。私は空の値をキャッチしたいので、特に正確なメッセージを表示できました。
  2. allowEmptyrequiredの値を反転し、lastの値をtrueに設定した新しいルールを追加するために、既存のルールを更新する必要がありました。

最後の変更は、私のコントローラのアクションに追加は、次のようになります

$this->Proposal->Requestor->validate = Set::merge(
    $this->Proposal->Requestor->validate, 
    array(
    'phone_number' => array(
     'notempty' => array(
     'rule'  => 'notEmpty', 
     'message' => 'Please enter a phone number so can can contact you with any questions about the work.', 
     'allowEmpty' => false, 
     'required' => true, 
     'last'  => true, 
    ), 
     'usphone' => array(
     'allowEmpty' => false, 
     'required' => true, 
    ), 
    ) 
) 
); 

私は既存のusphone規則の変更はlast値の与えられた厳密に必要であることが確認されかどうか覚えていないことができます新しいルールですが、この組み合わせはうまくいきます。

+0

ニースのおかげで問題が解決しました。 – Vins

関連する問題