Validation Cakephp修订行为阻碍验证错误?

Validation Cakephp修订行为阻碍验证错误?,validation,cakephp,model,behavior,revision,Validation,Cakephp,Model,Behavior,Revision,我有一个CakePHP票务应用程序,我用它保存每张票的修订历史记录。使用此行为的问题是,它不显示验证错误消息。这是我在模型中添加的行 public $actsAs = array('Revision' => array('limit'=>10)); 当我注释这一行时,它会显示错误消息,否则它不会。另外,当我使用x-debug调试它时,我看到validationErrors变量已设置,并且所有错误消息值都已正确设置 请在这里照点光 编辑:我正在使用Cake 2.1,这里可能会发生一些

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

public $actsAs = array('Revision' => array('limit'=>10));
当我注释这一行时,它会显示错误消息,否则它不会。另外,当我使用x-debug调试它时,我看到validationErrors变量已设置,并且所有错误消息值都已正确设置

请在这里照点光


编辑:我正在使用Cake 2.1,这里可能会发生一些事情。因为我们没有你的任何代码,所以我们无法简单地告诉你发生了什么。然而,我非常确定,这个行为,因为它是在2008年编写的,将与CakePHP版本2.1有问题,它刚刚发布了第一个alpha。Cake的基础设施已经发生了很多变化,这可能导致它无法工作。我想说,这可能适用于1.3版,当然也适用于1.2版,但如果没有更新,获得2.1版的支持可能是不可能的

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


我会寻找一个2.0+兼容版本的行为。或者,您可以将代码扔到Github上,自己开始移植它。你可能会得到一些蛋糕人的帮助。

这里可能会发生一些事情。因为我们没有你的任何代码,所以我们无法简单地告诉你发生了什么。然而,我非常确定,这个行为,因为它是在2008年编写的,将与CakePHP版本2.1有问题,它刚刚发布了第一个alpha。Cake的基础设施已经发生了很多变化,这可能导致它无法工作。我想说,这可能适用于1.3版,当然也适用于1.2版,但如果没有更新,获得2.1版的支持可能是不可能的

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


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

首先,请确保获得此行为的最新版本:

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

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

首先,确保获得此行为的最新版本:

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

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

我已经烘焙了我的视图,我确信没有常规错误,因为当我评论$actas时,它工作正常……您的视图不是问题,行为是问题。如果您使用的是CakePHP 2,并且该行为是为1.*编写的,那么它很可能不起作用,因为Cake core中的约定已更改。我已根据新的约定更改了所有约定…如果我正确填写表单,并且保存成功,它将创建修订。i、 这种行为有效!!但是验证错误不起作用..哈哈..猜猜是什么invalidFields()也会返回错误..无论如何..感谢Scott在这方面的帮助。我最终使用Ajax获取验证消息,并将其显示在字段旁边。我仍然不明白是什么打破了它。我一行一行地调试了行为,但我弄不明白。我可以从invalidFields()方法中检索所有验证错误。我已经烘焙了我的视图,并且我确信没有常规错误,因为当我注释$actas时,它工作正常……问题不在于您的视图,而在于行为。如果您使用的是CakePHP 2,并且该行为是为1.*编写的,那么它很可能不起作用,因为Cake core中的约定已更改。我已根据新的约定更改了所有约定…如果我正确填写表单,并且保存成功,它将创建修订。i、 这种行为有效!!但是验证错误不起作用..哈哈..猜猜什么invalidFields()也会返回