【问题标题】:validateAssociated overwriting associated model's errors, possible bug?validateAssociated 覆盖关联模型的错误,可能的错误?
【发布时间】:2012-01-24 08:04:04
【问题描述】:

我正在使用 cakephp 版本 2.0.2 并且对于为什么将数据提交给模型关联的表单提交没有显示关联的错误消息而摸不着头脑。

我一直在深入研究 Model 类以进一步诊断。我发现如果表单的主要模型有自己的验证错误,那么返回的任何关联都不会显示任何验证错误:

$this->validationErrors

但我想我找到了确凿的证据。在 Model.php 的 validateAssociated 方法中,您会看到:

$this->validationErrors = $validationErrors;
if (isset($validationErrors[$this->alias])) {
    $this->validationErrors = $validationErrors[$this->alias];
}

第一行设置$this->validationErrors 以包含所有关联中的所有累积错误。但是如果$validationErrors 包含$this->alias 的键(主要模型名称)的错误,那么正如您所见,$this->validationErrors 会被这些错误覆盖。

所以这引出了一个问题....为什么?我很确定这是一个错误,我想修改我的 Model.php,我认为它会起作用。但我想把这个放在其他人面前,以防我在这里做一些非常愚蠢的事情。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    我今天遇到了同样的问题。 BC就是这样。我知道,这很糟糕。这应该是一个错误。我解决它的方法是重新格式化验证错误。

    // AppModel.php
    
    public function formatValidationErrors($models) {
        foreach($models as $model => $assoc) {
            if (is_numeric($model)) {
                $model = $assoc;
                $assoc = null;
            }
            $this->validationErrors[$model] = $this->{$model}->validationErrors;
            if ($assoc) {
                $this->{$model}->formatValidationErrors($assoc);
            }
        }
    }
    

    如果验证失败,我称之为,并传递一个数组,就像你想要包含的那样。如果您不想修改核心,可以使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多