Zend-форма setValue, представление имеет пустое значение, например - PullRequest
2 голосов
/ 09 декабря 2010

У меня довольно сложная настройка формы с использованием Zend-Form. В какой-то момент я устанавливаю значение скрытого ввода, используя:

$oHidden = new Zend_Form_Element_Hidden('ratings'.$k);        
$oHidden->setValue('ratings');Zend_Debug::dump($oHidden);
$this->addElements(array($oHidden));

Этот метод хорошо работает в других местах той же формы, но этот и другой, точно так же, как выводит его:

<input type="hidden" name="ratings1" value="" id="ratings1" />

Я сбросил переменную $ oHidden, и она выдает:

object(Zend_Form_Element_Hidden)#143 (29) {<br> ... ["_value":protected] => string(7) "ratings" ["_view":protected] => NULL ["_isPartialRendering":protected] => bool(false) }

Так что какое-то время он отлично устанавливает значение, но не отображает его. Пожалуйста, дайте мне знать, с чего начать поиск причин такого поведения.

Спасибо, Alek

Ответы [ 2 ]

5 голосов
/ 22 июня 2011

Проблема как раз в функции isValid().Он удаляет все значения из формы и затем заполняет ее параметрами, которые ему передаются.Если параметр отсутствует, он, очевидно, больше не будет отображаться в форме, даже если он был задан явно несколькими строками ранее.

В моем случае было необязательное скрытое поле «перенаправить» в форме входа в систему.Вот код (упрощенный для читабельности):

$form = new Form_Login();
$redirect = $this->_getParam('redirect','/user/login/welcome');
$form->addElement('Hidden','redirect',array('value' => $redirect));

if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) {
    // WTF! the "request" field has no value!!!
}

Временное решение - установка параметра действия:

$form = new Form_Login();
$redirect = $this->_getParam('redirect','/user/login/welcome');
$this->_setParam('redirect',$redirect);
$form->addElement('Hidden','redirect',array('value' => $redirect));

if ($this->_request->isPost() && $form->isValid($this->_getAllParams())) {
    // AHA! now it works!
}

Я знаю, что вопрос полугодовал, но, ну, лучшепоздно, чем никогда: D.

3 голосов
/ 27 января 2011
$hidden = new Zend_Form_Element_Hidden(array('name' => 'ratings', 'value' => 'ratings'));

Попробуй!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...