Как исправить размер поля до максимальной длины с помощью form_widget - PullRequest
0 голосов
/ 19 июня 2019

Я использую form_widget для рендеринга своего поля, я хочу ограничить цифры до 5 (чтобы человек не набирал более 8 цифр) что-то вроде maxlengh в html

Я пробовал:

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'number - 8 digits',  'size' : '8' }}) }}

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'number - 8 digits',  'maxlength' : '8'  }}) }}

Как я могу ограничить количество цифр перед проверкой?

обновление: все еще не работает

это мой конструктор форм

->add('telMobile', null,array('label' => 'common.label.telmobile', 'required' => true ,'attr' => ['pattern' => '/^[0-9]{8}$/']))

и я попытался также добавить шаблон в виджет:

 {{ form_widget(form.telMobile, {'attr':{'class': 'form-control','placeholder' :'Téléphone mobile - 8 chiffres', pattern' : '/^[0-9]{8}$/' }}) }}

как вы видите на картинке, я все еще могу набрать более 8 цифр

enter image description here

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Так как вы передаете null в FormBuilder в качестве типа вашего поля, Система угадывания типов Symfony начинает работать. Это пытается угадать соответствующий элемент управления формы для вашего поля на основе его определения. Судя по стрелкам на скриншоте, он разрешается до NumberType, а числовое поле не имеет свойства maxlength.

Чтобы это исправить, вам нужно явно установить TextType:

->add('telMobile', TextType::class, array(
    'label' => 'common.label.telmobile', 'required' => true, 
    'attr' => ['pattern' => '/^[0-9]{8}$/', 'maxlength' => 8])
 )

Это, однако, будет иметь свои собственные компромиссы: теперь ввод будет ограничен по длине, но пользователь сможет вводить буквы. Если это нежелательно и вы хотите отклонить неверный ввод, вам придется использовать решение javascript .

0 голосов
/ 19 июня 2019

Этот вопрос больше относится к html-опциям ввода чисел, вы можете использовать параметры 'max' и 'min' при вводе типа номер

<input type="number" min="1" max="99999" />

, поэтому при использовании form_widget это будет выглядеть следующим образом:

 {{ form_widget(form.number, {'attr':{'class': 'form-control','placeholder' :'number - 5 digits','type':'number',  'max' : '99999'  }}) }}

Но более удобным будет создание поля формы с помощью NumberType :: class и добавление туда attr.Также, если вам нужно ровно 5 чисел, вы можете проверить это с помощью выражения регулярного выражения, но тип ввода должен быть "text", тогда:

'pattern' : '[0-9]{5}'  -this will expect exactly 5 digits

Подводя итог, если вам нужно, чтобы это было безопасно, то лучшеиспользуйте регулярное выражение на стороне сервера в Symfony, используя валидаторы.PS maxlength работает, если тип ввода - текст.

...