Zend Framework 2 RC3 Zend\Form#getData()

Интересно, я делаю что-то не так или это ошибка в ZF2: когда я пытаюсь установить некоторые данные в форме, проверить их и получить данные, это просто пустой массив.

Я извлек этот код из некоторых классов, чтобы упростить задачу.

    $form = new \Zend\Form\Form;
    $form->setInputFilter(new \Zend\InputFilter\InputFilter);
    $form->add(array(
        'name' => 'username',
        'attributes' => array(
            'type'  => 'text',
            'label' => 'Username',
        ),
   ));

   $form->add(array(
        'name' => 'submit',
        'attributes' => array(
            'type'  => 'submit',
            'value' => 'Register',
        ),
    ));

    if ($this->getRequest()->isPost()) {

        $form->setData($this->getRequest()->getPost()->toArray());
        if ($form->isValid()) {

            echo '<pre>';
            print_r($form->getData());
            print_r($form->getMessages());
            echo '</pre>';
        }
    }

оба print_r() показывают пустые массивы. Я не получаю никаких данных из формы, а также никаких сообщений. Это моя вина или ZF2?


person Andreas Linden    schedule 10.08.2012    source источник
comment
Массив пуст или значения ваших форм пусты?   -  person Sam    schedule 10.08.2012
comment
сначала проверьте print_r($_POST); и print_r($this->getRequest()->getPost(); и предоставьте их, чтобы сузить круг вашей проблемы.   -  person Samuel Herzog    schedule 10.08.2012
comment
@SamuelHerzog оба заполнены правильно   -  person Andreas Linden    schedule 11.08.2012
comment
Я предполагаю, что вы используете стандартный входной фильтр без каких-либо правил для имени пользователя/отправки. если нет данных для фильтрации/проверки, данные для вывода отсутствуют. используйте фабрику InputFilter, чтобы создать несколько правил, добавьте их в свою форму и посмотрите, что происходит!   -  person Samuel Herzog    schedule 12.08.2012
comment
В значительной степени это и то, к чему был направлен мой вопрос. Вам необходимо проверить данные формы. Zend\Form не будет выводить непроверенные данные. Валидатор (для каждого элемента формы) может быть пустым, но его нужно валидировать :)   -  person Sam    schedule 12.08.2012
comment
опубликуйте ответ @Sam, я бы сказал, что вы были первыми :)   -  person Samuel Herzog    schedule 13.08.2012


Ответы (1)


Благодаря @SamuelHerzog и @Sam форме нужны входные фильтры для всех элементов. В случае формы, описанной в вопросе, этого короткого кода достаточно, чтобы она вообще заработала.

    $inputFilter = new InputFilter();
    $factory     = new InputFactory();

    $inputFilter->add($factory->createInput(array(
        'name'     => 'username'
    )));

    $form->setInputFilter($inputFilter);

Для элемента не требуется никаких правил, его просто нужно добавить в inputFilter, чтобы он работал в основном. По умолчанию любой элемент имеет обязательный флаг и не может быть пустым значением.

person Andreas Linden    schedule 13.08.2012