У меня есть Form \ Element с InputFilter, для которого «обязательное» значение установлено как «false». При определенных обстоятельствах Element будет нуждаться в «обязательном» значении, установленном в «true» изнутри контроллера.Zend Framework 2 Установка Zend InputFilter setRequired()
Когда я установил Zend \ InputFilter setRequired (true) в моем контроллере, это не похоже на то, что вызывается метод $ form-> isValid(). Однако, если фильтр установлен там, где «требуется» является «истинным» в Zend \ InputFilter (и не динамически устанавливается внутри контроллера), тогда он работает так, как ожидалось, но это не мое желаемое решение, поскольку я использую эту форму и фильтрую несколько местоположения, и иногда поле требуется, а иногда - нет.
В моем контроллере я следующее:
$form = new UserDataForm();
$request = $this->getRequest();
if ($request->isPost()) {
$update = new UserFilter();
// The following doesn't seem to be respected
$update->getInputFilter()->get('userName')->setRequired(true);
$form->setInputFilter($update->getInputFilter());
$form->setData($request->getPost());
if($form->isValid()) {
//The result is true even when the 'userName' var is not set in the POST data.
echo("Is Valid");
} else {
echo($form->getMessages());
}
Я поставил свой UserDataForm класс() следующим образом:
class UserDataForm extends Form
{
public function __construct($name = null, array $userTypes) {
parent::__construct('user');
$this->setAttribute('method','post');
$this->add(array(
'name' => 'userName',
'attributes' => array(
'type' => 'text',
'class'=> 'small'
),
'options' => array(
'label' => 'Username:'
)
));
//... and so on...
Я установил свой класс UserFilter так:
public function getInputFilter() {
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'userName',
'required' => false,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
)
),
)
)));
// ...
Может кто-нибудь объяснить, почему $ update-> getInputFilter() -> get ('userName') -> setRequired (true) как вызвано из моего Controll er, похоже, не соблюдается, когда форма проверена?