Cakephp修订行为障碍验证错误?

时间:2012-01-21 00:12:15

标签: validation cakephp model behavior revision

我有一个CakePHP票务应用程序,我使用Revision Behavior来保存每张票的修订历史记录。我使用此行为的问题是,它不显示验证错误消息。这是我在模型中添加的行。

public $actsAs = array('Revision' => array('limit'=>10));

当我评论此行时,它会显示错误消息,否则会显示错误消息。此外,当我使用x-debug调试它时,我看到validationErrors变量已设置并且正确设置了所有错误消息值。

请在这里说清楚。

编辑:我正在使用Cake 2.1

2 个答案:

答案 0 :(得分:4)

首先,请务必获取此行为的最新版本:http://alkemann.googlecode.com/svn/trunk/models/behaviors/revision.php

对于CAKE 2.X中的集成,问题来自createShadowModel()函数中的第980行: $ Model-> ShadowModel-> alias = $ Model-> alias;

该行为为基本模型提供了相同的别名,并且它将保存在_revs表中的shadowmodel,这似乎搞乱了验证消息。 问题是当您访问模型时会自动加载此行为,即使您的输入未验证,也会调用createShadowModel()函数。 其中一个解决方案是从createShadowModel()中注释掉这一行,然后将它只添加到将在DB中进行操作的行为中的每个函数。肯定有比这更好的方法,比如在setup()中检测是否需要进一步初始化,但无法找到如何做到这一点。这是我迈向至少允许在Cake 2.X中使用此行为的第一步。

答案 1 :(得分:1)

这里可能会发生一些事情。由于我们没有您的任何代码,因此只需告诉您正在发生的事情太多了。但是,我很确定这种行为,因为它是在2008年编写的,将会出现CakePHP 2.1版的问题,它刚刚发布了它的第一个alpha版本。 Cake的基础结构发生了很多变化,可能会导致无法正常工作。我会说这可能适用于版本1.3而且肯定适用于1.2,但是如果没有更新,获得2.1的支持可能不会发生。

那就是说,这是一种行为,只应该改变模型代码。因此,对您的观点应该没有影响(理论上)。您确定在代码中使用正确的约定来显示错误(即使将其注释掉更改显示的消息)。

我会寻找2.0+兼容版本的行为。或者,您可以在Github上抛出代码并开始自己移植它。你可以从一些蛋糕人那里得到一些帮助。