У меня есть поле формы password
(notсопоставлено с User
password ) для использования в форме смены пароля вместе с двумя другими (сопоставленными) полями, first
и last
.
Приходится добавлять валидаторы на лету: если значение для пароля пустое, то валидациине должно происходить. В противном случае необходимо добавить новые валидаторыMinLength
и MaxLength
.
Вот что я сделал до сих пор: создал повторяющееся поле password
, добавил CallbackValidator
и return
if $form-> getData()
равно null
.
Тогда как я могу добавить валидаторы минимальной и максимальной длины в поле $?
$builder = $this->createFormBuilder($user);
$field = $builder->create('new_password', 'repeated', array(
'type' => 'password',
'first_name' => 'Password',
'second_name' => 'Confirm password',
'required' => false,
'property_path' => false // Not mapped to the entity password
));
// Add a callback validator the the password field
$field->addValidator(new Form\CallbackValidator(function($form) {
$data = $form->getData();
if(is_null($data)) return; // Field is blank
// Here password is provided and match confirm, check min = 3 max = 10
}));
// Add fields to the form
$form = $builder
->add('first', 'text', array('required' => false)) // Mapped
->add('last', 'text', array('required' => false)) // Mapped
->add($field) // Not mapped
->getForm();