【问题标题】:Cakephp Revision behavior hurdles validation error?Cakephp 修订行为阻碍验证错误?
【发布时间】:2012-01-21 00:12:15
【问题描述】:

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

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

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

请在此说明一下。

编辑:我使用的是 Cake 2.1

【问题讨论】:

    标签: validation cakephp model behavior revision


    【解决方案1】:

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

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

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

    【讨论】:

    • 您能否在RevisionBehavior.php 公关这个提议的更改,包括一些测试用例?
    • OK Mark,我去看看。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我已经总结了我的观点,我确信没有常规错误,因为当我评论 $actas 时,它工作正常......
    • 你的观点不是问题,行为才是问题。如果您使用的是 CakePHP 2 并且行为是为 1.* 编写的,那么它很可能无法工作,因为 Cake 核心中的约定发生了变化。
    • 我已经根据新的约定更改了所有约定...如果我正确填写表格并且保存成功时,它确实会创建修订。即行为有效!但是验证错误不起作用..大声笑...猜猜 invalidFields() 也会返回错误....无论如何..感谢 Scott 的帮助。
    • 我终于使用 Ajax 来获取验证消息,并将其显示在字段旁边。我仍然不明白是什么破坏了它。我逐行调试行为,但我无法弄清楚。我可以从 invalidFields() 方法中检索所有验证错误。
    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多