我正在使用CakePHP 3.5.5。
我对自定义验证规则感到震惊。在我看来,我有国家和州的领域。如果国家/地区字段的值是美国,那么我们需要使用州字段,否则我们不会。我在我的UsersTable.php中放了一个自定义验证规则,如下所示:
public function validationDefault(Validator $validator) {
$validator
->add('state', 'custom', [
'rule' => [$this,'validate_state'],
'provider' => 'custom',
'message' => 'Please enter state'
]);
}
并创建了validate_state函数,如下所示:
public function validate_state($value, $context) {
//debug($value, $context);die;
//if state is us)
//if state is not empty return true;
//if state is empty return false;
//else return true;
}
但它根本不起作用。它唯一要做的就是显示"这个字段不能留空#34;消息,如果我使用此规则。据我所知,如果您为字段创建了验证器规则,CakePHP会假定自己运行 notEmpty 。但我的问题是,在检查notEmpty方法之前我需要使用自定义函数的另一个字段的值之前,我不能将字段值规则为true或false。但在我的情况下,如果我不使用notEmpty方法,它既不会进入自定义函数validate_state,也不会显示我在此规则中使用的自定义消息。
在将表单请求数据发送给验证程序之前,您是否知道更好的方法来执行此操作?
答案 0 :(得分:1)
对notEmpty
(或allowEmpty
)规则使用callable,就像您在custom
规则中执行此操作一样,评估上下文以确定规则是否合规适用(即该字段是否必须为空),类似于:
$validator
->notEmpty('state', null, function ($context) {
// field must not be empty when the conditions evaluate to true
return
isset($context['data']['country']) &&
$context['data']['country'] === 'US';
})
// ...
另见