I am trying to do yii2 to check my ActiveForm field, which should be numeric and 8 characters long.
The following is an example that I used in the default yii2/advanced/backend model LoginForm yii2/advanced/backend , but unfortunately, the isNumeric checker just doesn't kick:
public function rules() { return [ // username and password are both required [['username', 'password'], 'required'], // username should be numeric ['username', 'isNumeric'], // username should be numeric ['username', '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.'); } } }
I also tried to add the script suggested in the corresponding post ( https://stackoverflow.com/a/312469/... ), but this only worked (as shown in the figure) if I did not include the password field in the script.
Is this a good way to achieve this at all, or can you think of a better way to do it?
Note. the reason I define username as string is because numbers can contain leading 0s.
source share