2010-12-28 6 views
0

注:これをやろうとしているわけではありません。代替案が見つかりましたが、今後その答えを知ることは有益な場合があります。CakePHP検証エラーメッセージ - それらを渡す方法?

私はコントローラのindex()アクションに関連付けられたビュー(index.ctp)内にあるフォームを持っています。そのフォームは、同じコントローラ内の別のアクションcontact()にデータをポストする必要があります。この2番目のアクションにはビューがありません。情報を処理し、結果に応じてユーザーをリダイレクトするだけです。このアクションは検証を行い、エラーが発生した場合にユーザーをリファラー(この場合はインデックス)にリダイレクトしてから、エラーをインデックスに表示する必要があります。モデルはデータベーステーブルを使用しませんが、検証ルールの定義にのみ使用されます。

検証が正しく行われており、予想されるエラーが報告されています。リダイレクト後のエラーを取得するために、$ this-> ModelName-> invalidFields()配列を、リダイレクト後にindex()アクションで取得されるセッション変数に書き込みます。 この配列は、ビューの$ errors変数に渡されます。今問題が起こります。エラーはリダイレクト間で正しく渡されますが、それぞれのフォームには添付されません。どうすればこれを達成できますか?フォームには従来の名前がす​​べて含まれているため、自動である必要がありますが、そうではありません。ここで

は、関連するコードの一部です:

Indexビュー:

echo $this->Form->create('Contact', array('url' => '/contacts/contact')); 
echo (rest of form) ... 
echo $this->Form->end(__('send message', true)); 

コンタクトコントローラ:

function index() { 

    if ($this->Session->check('Contact.errors')) { 
     $this->set('errors', $this->Session->read('Contact.errors')); 
    } 
} 

function contact() { 

    if (!empty($this->data)) { 
     $this->Contact->set($this->data); 

     if ($this->Contact->validates()) { 
      (send the email) 
     } 
     else { 
      $this->Session->write('Contact.errors', $this->Contact->invalidFields()); 
      $this->redirect($this->referer); 
     } 
    } 
} 

答えて

0

私はそれがで検証エラーを書き込むために良いアイデアだとは思いませんセッション変数。私はCakePHPの専門家ではありませんが、あなたがそれをやるべきだとは思いません。すべてのフォームはあなたがいる同じURLを指していなければならないので、ユーザーが入力したデータは失われません。

質問にいくつかのコードを追加できますか?

+0

私が使用していたコードを追加することができました(削除しなかった場合)が、これは理論的な問題です。私はそれを書き直してここに投稿しようとします。私は機能の分離の原則に従うためにこれをしようとしていました。 – devius

+0

さて、それはあなたの検証を行う方法ではありません。 – metrobalderas

+0

なぜですか?ユーザーデータはセッション変数に保存されているため、失われません。これがデフォルトのcakePHP動作です。私はエラーを含めるようにそれを拡張したい。それについて何が悪いですか? – devius

関連する問題