我有以下情况。 帖子有很多评论
评论属于帖子
在我的/ Views / Posts / view中,我显示Post及其Comments。此外,对于每个帖子,都应显示评论表。因此,我必须在视图中使用Element add_comment.ctp(如果我错了请更正,但请参阅this question here)。
/Views/Posts/view.ctp:
// add comments
echo $this -> element('add_comment',array('post_id' => $entry['Post']['id']), array('cache' => array('config' => 'long')));
元素:
/**
* Element for adding comments
*
*/
echo $this -> Form -> create('Comment', array('url' => array(
'controller' => 'comments',
'action' => 'add',
$post_id
)));
?>
<fieldset>
<legend><?php echo 'Add Comment'; ?></legend>
<?php
echo $this -> Form -> input('author_name');
echo $this -> Form -> input('author_email', array('type' => 'email required'));
echo $this -> Form -> input('author_website');
//echo $this->Form->input('date_published');
echo $this -> Form -> input('text');
//echo $this->Form->input('is_archived');
?>
</fieldset>
<?php echo $this -> Form -> end(array('label' => 'Post!')); ?>
如您所见,表单将提交给CommentsController的add操作。 现在,一个大问题:添加操作如何实际将验证结果等数据传递回表单?我的意思是,表单数据也应该保留,所以如果有人输入了无效数据,它就不会丢失。
通常情况下,添加操作会呈现/查看/评论/添加,但我既不需要这个视图也不需要定义一个。
到目前为止,我已经使用$ this-&gt;重定向在保存注释后返回到/ Views / Posts /视图 - 但重定向只调用/ Views / Posts / view而不传递任何内容。那么如何结合使用Elements和平滑自动的表单处理呢?
答案 0 :(得分:1)
我认为如果您在提交后重定向,它将丢失任何基本上触发验证错误等的$this->invalidFields()
。有几种方法可以解决这个问题......
1 :您可以不重定向并在comments/add.ctp
视图中再次呈现表单,以便自动显示表单并显示验证错误。然后,为了使流程再次平滑,重新定向回到您的帖子(您应该以某种方式拥有帖子ID)一旦保存成功并且验证已经过去。
2 :您还可以将注释保存逻辑放在注释模型中,然后在Post View操作中检查注释POST(更新表单以指向此操作)并调用保存功能你用$this->Post->Comment->saveMethodDefinedInModel($this->request->data['Post']);
创建那里。
3:或....你可以选择一个并将它与ajax结合起来,这样就相当粗糙了。