Создание представления формы в Zend - PullRequest
5 голосов
/ 28 января 2011

Есть ли надежный способ создания пользовательского представления для Zend_Form? Декораторы довольно загадочны, и использование их причудливыми способами иногда настолько сложно, что я предпочел бы просто написать HTML вручную. Есть ли способ сделать это и при этом заставить форму полностью взаимодействовать с контроллером (например, позвонить $form->isValid() и ожидать, что все будет проверено правильно)? Если да, есть ли какие-то предостережения, на которые стоит обратить внимание (например, заботиться об отображении ошибок валидации)?

Идеальным решением было бы создать форму и передать массив элементов (содержащий необходимые данные, такие как имена, идентификаторы, типы ввода и все необходимое для визуализации HTML) - разрешает ли это Zend Framework?

[EDIT]

Вместо того, чтобы просто echo использовать объект формы, я попытался добавить этот код в представление (простая форма входа):

<?php
$userid = $this->form->getElement('userid');
$pass = $this->form->getElement('password');
$remember = $this->form->getElement('remember');
$submit = $this->form->getElement('submit');
?>
<form enctype="<?php echo $this->form->getEnctype(); ?>" method="<?php echo $this->form->getMethod(); ?>" action="<?php echo $this->form->getAction(); ?>" id="<?php echo $this->form->getId(); ?>">
name: <input type="text" id="<?php echo $userid->getId(); ?>" name="<?php echo $userid->getName(); ?>" /><br />
pass: <input type="password" id="<?php echo $pass->getId(); ?>" name="<?php echo $pass->getName(); ?>" /><br />
remember: <input type="checkbox" id="<?php echo $remember->getId(); ?>" name="<?php echo $remember->getName(); ?>" /><br />
submit: <input type="submit" id="<?php echo $submit->getId(); ?>" name="<?php echo $submit->getName(); ?>" value="<?php echo $submit->getValue(); ?>" />
</form>

Форма, кажется, работает нормально и проверяется (хотя я не перенаправлен на страницу, с которой я пришел - но я считаю, что это другая проблема, когда я передаю ее через GET, а не в форме). Это приемлемо, или я делаю что-то ужасно неправильно, не зная об этом?

1 Ответ

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

Многое зависит от дизайна и окончательного макета.

Где вы хотите отобразить ошибки проверки?Как?Via Error decorator?
Хотите ли вы также использовать описания?
Вам нужны другие декораторы?

Лучше всего создать собственный элемент Zend_Form_Element_ThreadIcons.Это так же просто, как создать подкласс одного из элементов Zend_Form и реализовать собственный метод _render(), возвращающий необходимый вам HTML.Вы даже можете использовать свой собственный экземпляр View.

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

Если вы решите использовать декораторы,Я считаю эту презентацию очень полезной для овладения техникой:

...