注:これをやろうとしているわけではありません。代替案が見つかりましたが、今後その答えを知ることは有益な場合があります。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);
}
}
}
私が使用していたコードを追加することができました(削除しなかった場合)が、これは理論的な問題です。私はそれを書き直してここに投稿しようとします。私は機能の分離の原則に従うためにこれをしようとしていました。 – devius
さて、それはあなたの検証を行う方法ではありません。 – metrobalderas
なぜですか?ユーザーデータはセッション変数に保存されているため、失われません。これがデフォルトのcakePHP動作です。私はエラーを含めるようにそれを拡張したい。それについて何が悪いですか? – devius