Максимальное количество текстовых полей Yii2 ActiveForm

У меня есть поля, как показано ниже

<?= $form->field($model, 'phone')
->textInput(['type' => 'number', 'maxlength' => 13])
->label('Phone') 
?>

почему 'maxlength' не работает? и как заставить работать?

спасибо перед


person Collin Chu    schedule 04.02.2018    source источник
comment
почему вы используете type=number для поля ввода по какой-либо причине?   -  person Muhammad Omer Aslam    schedule 04.02.2018
comment
добавил ответ, чтобы вы увидели, поможет ли это вам   -  person Muhammad Omer Aslam    schedule 07.02.2018
comment
@MuhammadOmerAslam сделано, сэр   -  person Collin Chu    schedule 22.02.2018


Ответы (2)


Это не сработает, потому что вы используете type=>number для поля ввода, вам нужно изменить его на type=>text.

<?= $form->field($model, 'phone')
->textInput(['type' => 'text', 'maxlength' => 13])
->label('Phone') 
?>

Глядя на ваш ввод, кажется, что вы делаете это, потому что вы не хотите, чтобы пользователь вводил что-либо, кроме чисел, для поля Phone, Yii2 предоставляет вам очень хороший способ сделать это, т.е. yii\widgets\MaskedInput, вы можете отформатировать свой ввод, используя параметр mask, чтобы указать его сколько цифр разрешить и в какой последовательности см. демоверсии HERE

<?= $form->field($model, 'phone')->widget(\yii\widgets\MaskedInput::className(), [
    'mask' => '999-999-9999',
]) ?>

Помимо решений, приведенных выше, вы также можете проверить это внутри своей модели, используя опцию пользовательской проверки.

Ваше правило для телефона внутри вашей модели должно выглядеть так

[['phone'],'PhoneLimit']


public function PhoneLimit($attribute)
{
    if (!preg_match('/^[0-9]{13}$/', $this->$attribute)) {
        $this->addError($attribute, 'Please provide digits only no more than 13.');
    }
}
person Muhammad Omer Aslam    schedule 04.02.2018
comment
уверен, что @IHUB не торопится - person Muhammad Omer Aslam; 09.02.2018

попробуйте для типа number -> 'type' => 'number', 'min' => 1, 'max' => 999

person Soner PALANCI    schedule 28.05.2020