我有一个CakePHP票务应用程序,我使用Revision Behavior来保存每张票的修订历史记录。我使用此行为的问题是,它不显示验证错误消息。这是我在模型中添加的行。
public $actsAs = array('Revision' => array('limit'=>10));
当我评论此行时,它会显示错误消息,否则会显示错误消息。此外,当我使用x-debug调试它时,我看到validationErrors变量已设置并且正确设置了所有错误消息值。
请在这里说清楚。
编辑:我正在使用Cake 2.1
答案 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上抛出代码并开始自己移植它。你可以从一些蛋糕人那里得到一些帮助。