2012-03-23 6 views
1

2つのモデルを呼び出すフォームがあります。誤って入力されたデータが検証に失敗するという点で私の検証は正しく機能します。ただし、エラーメッセージはRELATEDモデルデータにのみ表示されます。ここでは両方のモデルと私のフォームの抜粋です:私は私のUnitsControllerにいるので、検証が失敗したときに、1つのモデルでエラーメッセージが機能しない

echo $this->Form->input('Location.exchange', array('size'=>'3', 'error' => array('class' => 'error'))); 
echo $this->Form->input('Location.sln', array('size'=>'4', 'error' => array('class' => 'error'))); 
echo '<br />'; 
echo $this->Form->input('unit_website', array('size'=>'65', 'label'=>'Your unit\'s website', 'error' => array('class' => 'error'))); 
echo '<br />'; 

echo $this->Form->input('specials', array('size'=>'65', 'label'=>'Your website\'s Specials page', 'error' => array('class' => 'error'))); 
echo '<br />'; 

エラーメッセージは、皮肉である、検証が場所に障害が発生したときに表示することが、(ユニットである)他のではないだろう。ここでは、コントローラのコードは次のとおりです。

function edit($id) { 
$this->set('title', 'Edit your property'); 
$this->Unit->id = $id;  
if (empty($this->request->data)) {   
$this->request->data = $this->Unit->read();  
} else { 

    if ($this->Unit->saveAll($this->request->data)) {    
     $this->Session->setFlash('Your property has been updated.', 'success');    
    } else { 
     Set::merge($this->Unit->read(), $this->request->data); 
    } 
} 
} 

、ここでは私の場所のモデルと私のユニットモデルの両方から検証アレイの抜粋です: (モデル部から):

public $validate=array(
    'type'=>array(
     'rule'=>'notEmpty', 
     'message'=>'You must choose what type of property this is.' 
    ), 
    'unitnum'=>array(
     'rule'=>array('custom', '/^[a-z0-9 -\'.\/&]*$/i'), 
     'message'=>'Must be the name or number of your unit.' 
    ) 
); 

(モデル場所から):あなたはモデル - を見れば

public $validate = array(
     'area_code'=> array(
      'ac1'=> array(
       'rule'=>'numeric', 
       'message'=>'Must be a number' 
      ), 
      'ac2'=>array(
       'rule'=>array('comparison', '>=',100), 
       'message'=>'You must enter a valid area code' 
      ) 
    ); 

答えて

1

>()関数を読んで、あなたはそれが

で始まっていることがわかります
$this->validationErrors = array(); 

だから、ライン

Set::merge($this->Unit->read(), $this->request->data); 

は、検証エラー

+0

へぇをクリアします。 read()関数の実際の定義を調べることは決して考えられませんでした。さて、私はそれを見る。私の問題は、merge()メソッドがなければ、エラーを訂正してレコードを適切に更新するために私のデータ配列全体を保存しないということです。これに対処するためのアドバイスはありますか? – huzzah

+0

'$ this-> request-> data'の内容を変更しないと、検証が失敗したときに、フォームから送信されたものはすべてフォーム上で再び利用可能になります。とにかく、 'read()'の代わりに 'find()'を使うと、検証エラーを保存するはずです。 – nIcO

+0

Hmm。私は、実際にフォームの中で使用されなかったモデルからすべての配列データを失うので、私はmerge()関数を使用していました。http://stackoverflow.com/questions/9690300/cakephp-このデータはフォーム提出後のデータ配列の大部分を失います。それは前に問題を引き起こしていましたが、それ以来私の編集ページの周りで変更されているので、これはもはや問題ではありません。結局この行を削除することができます。ありがとう! – huzzah

関連する問題