Форма не имеет доступа к своим значениям.Это нормально? - PullRequest
0 голосов
/ 24 января 2011

Впервые я замечаю это, и это меня немного удивляет.

У меня есть zend_form с простым текстовым элементом.

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Name');
$this->addElement($name);

Странно то, что когда я отправляю форму и пытаюсь прочитать значение в самой форме (я делаю некоторую отладку там, а не в контроллере), $name->getValue() не работает, но работает прямой $ _POST ,

echo $name->getValue(); //gives blank
echo $_POST['name'];    //gives the right value

Это нормально? Как форма не имеет своих значений? Я подумал, что лучше читать их с помощью $ field-> getValue (), чем напрямую обращаться к значениям $ _POST.

Второй вопрос: чтобы прочитать значение в форме, есть ли лучший способ, чем прямой доступ из $ _POST?

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Вам необходимо явно передать данные в форму, потому что ZF не знает, где их взять:

if ($form->isValid($_POST)) { // access values }

или

if ($form->isValid($request->getPost())) { // access values }
1 голос
/ 24 января 2011

Нет. Придерживайтесь использования $_POST и $_GET. Честно говоря, я не понимаю, почему вы используете Zend для создания и извлечения данных из формы, когда это гораздо проще сделать с помощью простого PHP.

<?php if( !isset( $_POST['name'] ) ): ?>
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <label for="name">Name:</label> <input type="text" name="name" id="name" />
</form>
<?php else: ?>
Value = <?= $_POST['name'] ?>
<?php endif; ?>

Полагаю, все в твоем стиле кодирования. Я бы предпочел вышеизложенное, но если вы хотите отделить логику от HTML, то Zend, безусловно, является вариантом.

...