我需要创建一个审核表。我有 2 个模型和 2 个控制器 - 产品和评论与“产品”有许多“评论”关系,评论表单将显示在当前产品页面上(产品控制器,“查看”操作),此表单将使用另一个控制器(评论)。
我还需要对此表单进行验证,并显示验证错误。
在我的 Products 控制器 view.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();
评论控制器 -> 添加:
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 语句:
评论控制器-> 添加:
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 错误:缺少视图
Error: The view for ReviewsController::add() was not found.
我的问题是如何正确处理这种情况以实现我需要的功能?我应该使用带有请求操作的元素还是应该移动操作以将评论添加到 ProductsController?