我的项目中有这个类:
<?php
namespace app'models;
use Yii;
use yii'base'Model;
class Contact extends Model
{
public $fullname;
public $info;
public function rules()
{
return [
['fullname','info'],'required'
];
}
}
我想对我的"联系人"字段进行自定义验证。如果字段上的值不是数字,我想将其验证为邮件。
有没有办法用条件验证器来做到这一点?提前感谢所有帮助
你可以做很多事情来完成这个自定义验证器,在 beforeValidate() 中玩输入等等。就个人而言,最好的方法是设置场景。在验证模型之前,在控制器中检查用户输入是否为数字 (is_numeric()),如果将场景设置为"something1",则不设置为"邮件"。这样,您就不必担心验证问题,因为您将为具有不同方案的同一属性设置两个规则。一个规则将是电子邮件,另一个可以是integerOnly或类似的东西。希望对您有所帮助。
您可以定义一个内联函数来验证规则中的字段。在您的情况下,我想您可能会执行以下操作:
public function rules()
{
return [
['contact', 'validateContact'],
];
}
public function validateContact($attribute, $params)
{
if ( !is_numeric($this->$attribute) ) {
$validator = new yii'validators'EmailValidator();
if ($validator->validate($this->$attribute, $error)) {
echo 'Email is valid.';
} else {
echo $error;
}
} else {
echo 'Contact is number';
}
}
更多信息:
1) http://www.yiiframework.com/doc-2.0/guide-input-validation.html
2) http://www.yiiframework.com/doc-2.0/guide-input-validation.html#using-client-side-validation