1

Например у нас есть форма с двумя полями, фильтров и валидаторов:Как установить значение поля формы из другого?

$factory = new \Zend\Form\Factory(); 
$form = $factory->createForm([ 
    'elements' => [ 
     [ 
      'spec' => [ 
       'name' => 'fieldOne', 
       'type' => 'Text', 
      ], 
     ], 
     [ 
      'spec' => [ 
       'name' => 'fieldTwo', 
       'type' => 'Text', 
      ], 
     ], 
    ], 
    'input_filter' => [ 
     'fieldOne' => [ 
      'filters' => [ 
       ['name' => 'StringTrim'], 
      ], 
      'validators' => [      
       new \Application\Validator\FieldOneValidator(), 
      ], 
     ], 
     'fieldTwo' => [ 
      'filters' => [ 
       ['name' => 'StringToUpper'], 
      ], 
     ], 
    ], 
]); 

Если fieldOne является действительным и fieldTwo пусто, то необходимо установить форму отфильтрованного значения fieldOne в fieldTwo и процеживают.

$form->setData([ 
    'fieldOne' => ' test ', 
    'fieldTwo' => '', 
]); 
if ($form->isValid()) { 
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'TEST'] 
} 

$form->setData([ 
    'fieldOne' => ' test ', 
    'fieldTwo' => 'not empty', 
]); 
if ($form->isValid()) { 
    $form->getData(); // ['fieldOne' => 'test', 'fieldTwo' => 'NOT EMPTY'] 
} 

Как это реализовать?

ответ

0

Посмотрите на «идентичный» валидатор: https://github.com/zendframework/zend-validator/blob/master/src/Identical.php#L154

В вашем валидатор, есть второй параметр $context передается IsValid, который дает значения в форме.

Здесь вы хотите использовать другие поля, чтобы подтвердить свое текущее поле.

Иными словами, создать пользовательский валидатор и использовать «контекст» в вашем валидаторе, который вы прикрепляете к своему полю с зависимостями.

+0

Валидатор проверяет только значение, но мне нужно его изменить с помощью контекста. –

Смежные вопросы