从视图中的另一个模型形式

时间:2011-11-14 13:36:26

标签: validation cakephp cakephp-2.0 cakephp-appmodel

所以我正在尝试扩展Blog教程,添加一些注释:

Post hasMany Comments

我想在“帖子视图”的同一视图中显示添加评论表单。事情是我不知道采用这种方法的最佳方法。我想了三个方法:

  • 在Comments Controller中创建一个函数来处理数据。
  • 在Post Controller中创建一个函数来处理数据。
  • 处理处理帖子视图的同一函数中的数据。

两个第一个'解决方案'的主要问题是验证错误没有显示在表单中,除非我做了一些混乱的黑客攻击,在会话变量中保存无效字段然后在beforeFilter回调中解析变量,像这样:

function beforeFilter () {
    if ($this->Session->check('comment_error')) {
        $this->Post->Comment->validationErrors = $this->Session->read('comment_error');
        $this->Session->delete('comment_error');
    }
}

我基本上做的是将无效字段调整到实际视图并允许它正确显示。这很好用,但对我来说似乎很难看。什么是最好的方法?

另一个相关问题:控制器应该反映视图吗?我的意思是在那个例子中,我想到只有一个注释模型并处理控制器中的所有数据,其中添加注释的形式(即使它在后控制器中)。

2 个答案:

答案 0 :(得分:0)

听起来你正在寻找Mutlivalidatable行为:http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

这允许您为每个模型定义多个验证规则集。使用您的控制器确定在发布内容时应用哪一个。

P.S。我只在Cake 1.3项目上使用它,不确定它是否适用于2.0。

答案 1 :(得分:0)

我这样看:

  1. 在每个帖子下都有一个输入框“添加评论”,其中包含一个要提交的按钮。
  2. 提交一些文本后,表单会重定向到comments_controller,其中的评论会以此post_id,正文,作者,日期等保存。
  3. 保存评论并完成所有逻辑后,它会将您带回帖子。
  4. 在每个帖子下都显示了所有相关的评论(具有相同的post_id按日期或其他类别排序)。