レビューフォームを作成する必要があります。2つのモデルと2つのコントローラーがあります–「Products」hasMany「Reviews」の関係を持つ製品とレビュー、レビューフォームは現在の製品ページに表示され(Productsコントローラー、「view」アクション)、このフォームは別のコントローラーを使用します(レビュー)。
また、検証エラーが表示されているこのフォームの検証が必要です。
私のProductscontrollerview.ctpには、次のものがあります。
// product page stuff...
echo $this->Form->create($model = 'Review', array('url' => '/reviews/add'));
echo $this->Form->input('name', array('label' => 'Your name:'));
echo $this->Form->input('email', array('label' => 'Your e-mail:'));
echo $this->Form->input('message', array('rows' => '6', 'label' => 'Your message:'));
echo $this->Form->hidden('product_id', array('default' => $product['Product']['id']));
echo $this->Form->end('Send');
echo $this->Session->flash();
ReviewsController->追加:
public function add() {
if ($this->request->is('post')) {
$this->Review->save($this->request->data);
$this->redirect(array('controller' => 'products', 'action' => 'view', $this->request->data['Review']['product_id'], '#' => 'reviews'));
}
}
どういうわけか、この恐ろしいコードは機能します。保存を確認しますが、検証エラーは表示されません。
このアクションにIfステートメントを追加した場合:
ReviewsController->追加:
public function add() {
if ($this->request->is('post')) {
if ( $this->Review->save($this->request->data) ){
$this->redirect(array('controller' => 'products', 'action' => 'view', $this->request->data['Review']['product_id'], '#' => 'reviews'));
}}
}
フォームにエラーがあり、検証されなかった場合、MissingViewエラーが発生します:Missing View
Error: The view for ReviewsController::add() was not found.
私の質問は、この状況に適切に対処して、必要な機能を実現する方法です。リクエストアクションで要素を使用する必要がありますか、それともProductsControllerにレビューを追加するためにアクションを移動する必要がありますか?