我想知道是否可以使用 CakePHP 验证规则来验证一个依赖于另一个字段的字段。
我一直在阅读有关自定义验证规则的文档,但$check
参数仅包含要验证的当前字段的值。
例如。只有当new_password字段不为空时,我才想根据需要定义verify_password字段。(如果
无论如何我都可以用 Javascript 来做,但我想知道是否可以直接用 CakePHP 来做。
我想知道是否可以使用 CakePHP 验证规则来验证一个依赖于另一个字段的字段。
我一直在阅读有关自定义验证规则的文档,但$check
参数仅包含要验证的当前字段的值。
例如。只有当new_password字段不为空时,我才想根据需要定义verify_password字段。(如果
无论如何我都可以用 Javascript 来做,但我想知道是否可以直接用 CakePHP 来做。
当您验证模型上的数据时,数据已经是set()
. 这意味着您可以在模型的$data
属性上访问它。下面的示例检查我们正在验证的字段,以确保它与验证规则中定义的其他字段(例如密码确认字段)相同。
验证规则如下所示:
var $validate = array(
'password' => array(
'minLength' => array(
'rule' => array('minLength', 6),
'message' => 'Your password must be at least 6 characters long.'
),
'notempty' => array(
'rule' => 'notEmpty',
'message' => 'Please fill in the required field.'
)
),
'confirm_password' => array(
'identical' => array(
'rule' => array('identicalFieldValues', 'password'),
'message' => 'Password confirmation does not match password.'
)
)
);
然后,我们的验证函数查看传递的字段数据(confirm_password)并将其与我们在规则中定义的数据(传递给$compareFiled
)进行比较。
function identicalFieldValues(&$data, $compareField) {
// $data array is passed using the form field name as the key
// so let's just get the field name to compare
$value = array_values($data);
$comparewithvalue = $value[0];
return ($this->data[$this->name][$compareField] == $comparewithvalue);
}
这是一个简单的示例,但您可以使用$this->data
.
您帖子中的示例可能如下所示:
function requireNotEmpty(&$data, $shouldNotBeEmpty) {
return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}
和规则:
var $validate = array(
'verify_password' => array(
'rule' => array('requireNotEmpty', 'password')
)
);