2013-09-13 2 views
1

Я не могу понять, как получить отфильтрованные значения из формы.zf2 получить отфильтрованные значения из формы

Например, в контроллере я просто создать форму и проверить, если она действует или нет:

$editPersonFormObject->setData($this->getRequest()->getPost()); 
if ($editPersonFormObject->isValid()) { 
    // saving logic 
} 

Форма содержит элемент «имя»:

$nameObject = new Text('name'); 
$nameObject->setValue($personRowObject->name); 

и реализует «getInputFilter "метод:

$this->filter = new InputFilter(); 

$this->filter->add(
     array(
      'name' => 'name', 
      'required' => true, 
      'filters' => array(
       array('name' => 'StripTags'), 
       array('name' => 'StringTrim') 
      ), 
    ... 
return parent::getInputFilter(); 

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

$personRowObject->name = $formObject->get('name')->getValue(); 

Я получаю нефильтрованное значение с пробелами. Даже когда я пытаюсь получить значение с помощью FormInput Фильтр:

$formObject->getInputFilter()->getValues(); 

я получаю массив пустых значений:

array(1) { 
    ["name"] => string(0) "" 
} 

Что я делаю неправильно?

ответ

4

Правильный способ извлечения данных из формы является использование $form->getData()

Это будут либо массив значений или объект, в зависимости от того, как форма устанавливается. Функция getData(), кроме того, может быть вызвана, после Форма подтверждена с использованием $form->isValid(). Также будут отфильтрованы возвращаемые вами значения. Как фильтрацияперед проверкой.

+0

Это нормально, я понимаю, но я получаю массив пустых строк, вызывающий $ formObject-> getValues ​​() точно так же, как array (1) {["name"] => string (0) ""} –

+1

'getData () 'not' getValues ​​() '- если поле' name' не проверено правильно, содержимое будет пустым 'string (0)'. Проверьте '$ form-> getMessages()' – Sam

+0

Моя ошибка, я неправильно создал фильтр. TY! –

0

Вы можете иметь объект, связанный с формой:

$form->bind($personRowObject); 

if ($form->isValid()) { 
    // this returns an object already populated with the form values, filtered 
    $person = $form->getData(); 
} 

Ваш человеком объект должен иметь метод exchangeArray($data), где вы установите желаемые свойства объекта из данных формы.

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