php – Yii2:ActiveForm字段数字,长度=> 8

前端之家收集整理的这篇文章主要介绍了php – Yii2:ActiveForm字段数字,长度=> 8前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使yii2验证我的ActiveForm字段,该字段应为数字且长度为8个字符.

以下是我在yii2 / advanced / backend的默认LoginForm模型中尝试过的,但不幸的是isNumeric验证器根本没有启动:

public function rules()
{
    return [
        // username and password are both required
        [['username','password'],'required'],// username should be numeric
        ['username','isNumeric'],'string','length'=>8],// password is validated by validatePassword()
        ['password','validatePassword'],];
}

/**
 * Validates if the username is numeric.
 * This method serves as the inline validation for username.
 *
 * @param string $attribute the attribute currently being validated
 * @param array $params the additional name-value pairs given in the rule
 */
public function isNumeric($attribute,$params)
{
    if (!is_numeric($this->username))
        $this->addError($attribute,Yii::t('app','{attribute} must be numeric',['{attribute}'=>$attribute]));
}

/**
 * Validates the password.
 * This method serves as the inline validation for password.
 *
 * @param string $attribute the attribute currently being validated
 * @param array $params the additional name-value pairs given in the rule
 */
public function validatePassword($attribute,$params)
{
    if (!$this->hasErrors()) {
        $user = $this->getUser();
        if (!$user || !$user->validatePassword($this->password)) {
            $this->addError($attribute,'Incorrect username or password.');
        }
    }
}

我还尝试添加一个相关帖子(https://stackoverflow.com/a/27817221/2037924)中建议的场景,但只有在场景中没有包含密码字段时才会起作用(如显示错误).

这是实现这一目标的好方法,还是你能想到一个更好的方法吗?

注意:我将用户名定义为字符串的原因是因为数字可能包含前导0.

在此处阅读有关验证的更多信息: http://www.yiiframework.com/doc-2.0/guide-tutorial-core-validators.html#number

这对我使用yii2-basic的联系表格很好

/**
 * @return array the validation rules.
 */
public function rules()
{
    return [
        // name,email,subject and body are required
        [['name','email','subject','body'],// email has to be a valid email address
        ['email','email'],['subject','is8NumbersOnly'],// verifyCode needs to be entered correctly
        ['verifyCode','captcha'],];
}

public function is8NumbersOnly($attribute)
{
    if (!preg_match('/^[0-9]{8}$/',$this->$attribute)) {
        $this->addError($attribute,'must contain exactly 8 digits.');
    }
}

猜你在找的PHP相关文章