Validation CakePHP 3.5如何根据另一个字段的值验证空字段或非空字段?

Validation CakePHP 3.5如何根据另一个字段的值验证空字段或非空字段?,validation,cakephp,rule,cakephp-3.5,Validation,Cakephp,Rule,Cakephp 3.5,我使用的是CakePHP3.5.5 我被一个自定义的验证规则打动了。在我看来,我有国家和州域。如果country字段的值为US,则我们需要state字段,否则不需要。我在UsersTable.php中设置了一个自定义验证规则,如下所示: public function validationDefault(Validator $validator) { $validator ->add('state', 'custom', [ 'rule' => [$this,'v

我使用的是CakePHP3.5.5

我被一个自定义的验证规则打动了。在我看来,我有国家和州域。如果country字段的值为US,则我们需要state字段,否则不需要。我在UsersTable.php中设置了一个自定义验证规则,如下所示:

public function validationDefault(Validator $validator) {
  $validator
    ->add('state', 'custom', [
    'rule' => [$this,'validate_state'],
    'provider' => 'custom',
    'message' => 'Please enter 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;
}
并创建了如下验证_状态函数:

public function validationDefault(Validator $validator) {
  $validator
    ->add('state', 'custom', [
    'rule' => [$this,'validate_state'],
    'provider' => 'custom',
    'message' => 'Please enter 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;
}
但它根本不起作用。如果我使用此规则,它唯一要做的就是显示“此字段不能为空”消息。我知道,如果您已经为字段创建了验证程序规则,CakePHP会假设自己运行notEmpty。但我的问题是,在检查另一个字段的值之前,我无法将字段值规则为true或false,而在检查notEmpty方法之前,我需要为该字段使用自定义函数。但是在我这里的例子中,如果我不使用notEmpty方法,它既不会进入自定义函数validate_状态,也不会显示我在此规则中使用的自定义消息


在将表单请求数据发送到验证器之前,您是否知道一种更好的方法来不破坏表单请求数据?

notEmpty
(或
allowEmpty
)规则使用可调用的方法,就像在
自定义
规则中一样,评估上下文以确定规则是否适用(即字段是否不能为空),大致如下:

$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';
    })
    // ...
另见