【问题标题】:How can I prevent CakePHP validating fields not in $fieldList?如何防止 CakePHP 验证不在 $fieldList 中的字段?
【发布时间】:2015-11-30 04:14:38
【问题描述】:

我使用的是 CakePHP2.7.5,我的模型的 save 函数失败了,因为它试图验证 $fieldList 参数中未指定的字段。

根据Cookbooksave方法将$fieldList作为第三个参数,将保存的字段限制为$fieldList中列出的字段。

Model::save(array $data = null, boolean $validate = true, array $fieldList = array())

我在模型中这样调用save

$this->save($data, true, ['name', 'place']);

$data 是这样的:

[ 'ModelName' => [ 'id' => $id, 'name' => 'abcdef', 'place' => 'ghijklmn' ] ]

但它失败了,因为$data 中未显示的必填字段发生验证错误。它应该以这种方式工作吗?

我必须在$data 中为必填字段添加一些虚拟数据吗?

【问题讨论】:

  • 我认为这是正确的行为,因为如果我为我的模型创建一些验证规则,我想依赖它,以便存储到数据库中的数据始终有效。是否要将与验证规则不匹配的数据集存储到数据库中?
  • 对不起,如果不清楚,但我的意思是已经有一条有效的记录,我只想更新上面示例中的“名称”和“地点”字段。我没有触及任何其他领域,所以我不需要对这些领域进行验证。我期待指定 $fieldList 将适用于这种情况。

标签: php validation cakephp cakephp-2.x


【解决方案1】:

您可能需要在验证规则中将 required 设置为 false:

public $validate = array(
    'description' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => false,
            'message' => 'You have to enter a valid description'
        )
);

}

CakePHP 2.x Validation: 'required'

【讨论】:

    【解决方案2】:

    我自己找到了答案。在Cake的Model::save函数中,第二个参数$validate可以是一个数组,只有当它是一个数组时才会出现这个问题。 (因此,我在上述问题中的示例并不准确。)

    所以,这个应该按预期工作(仅验证和保存“名称”和“地点”),

    $this->save($data, true, ['name', 'place']);
    

    但这个没有,

    $this->save($data, ['validate' => true], ['name', 'place']);
    

    实际上我就是这样做的。 (因为我不得不将“原子”设为假,这就是如何做到的。)

    $this->save($data, ['validate' => true, 'atomic' => false], ['name', 'place']);
    

    就我而言,这就是解决方案。

    $this->save($data, ['validate' => true, 'atomic' => false, 'fieldList' => ['name', 'place']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 2020-04-22
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2015-01-24
      • 2014-03-28
      • 1970-01-01
      相关资源
      最近更新 更多