【问题标题】:CakePHP 3: How to force either of two fields to be notEmpty using validationCakePHP 3:如何使用验证强制两个字段中的任何一个为 notEmpty
【发布时间】:2015-09-20 20:01:16
【问题描述】:

我有一个模型要求两个字段之一为非空。只要另一个不是,任何一个都可以是空的。我被困在最好的方法上。

我可以防止像这样的 empty 条目:

$validator
        ->notEmpty('my_field', 'a or b must be non-empty', [$this, 'checkIfAorBisEmpty']);            

第三个参数是一个条件函数,它返回true,仅当另一个字段也为空时才强制执行规则。但这只会阻止这样的事情:

$this->Table->newEntity(['a'=>'', 'b'=>'', 'c'='foobar']);`

我也想提防这样的事情:

$this->Table->newEntity(['c'=>'foobar']);`

上面的代码不会阻止这种情况,因为如果键从保存的数据中完全省略,那么它们就没有效果。我不能使用requirePresence,因为根据文档,与 notEmpty 不同,它不支持条件函数。

显然应用程序buidRules() 并没有以同样的方式受到限制,但它们不在newEntity() 上运行。

这样做的正确方法是什么?

【问题讨论】:

    标签: php validation cakephp cakephp-3.0


    【解决方案1】:

    我发现了我的问题...我误解了 newEntity()save() 的工作方式。我以为 newEntity 正在更新数据库,但我错了。它运行验证并返回一个实体对象。然后需要保存实体对象......这就是构建规则适用的时候。

    所以我的问题的解决方案实际上是构建规则。我只是还不知道。尽管我的问题被误导了,但我将把它留在这里,以防其他人遇到同样的问题。两层验证系统是 CakePHP v2 到 v3 的变化之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2022-11-21
      • 2016-05-30
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多