Лучший способ визуализировать Zend_Form с существующей разметкой

Я хочу использовать Zend_Form из-за его проверки и фильтров и т. Д. Но разметка для форм уже сделана. Хуже того, он не очень стандартизирован, поэтому создание собственных декораторов - не решение.

Есть ли простой способ «применить» Zend_Form к существующей очень настраиваемой разметке? Думаю, это обычная проблема.


person Valentin Golev    schedule 18.11.2009    source источник


Ответы (2)


Если вы используете в своей ручной HTML-форме те же имена, что и в вашем Zend_Form, вы можете просто создать экземпляр формы при получении данных:

public function processFormAction()
{
    $form = new My_Form(); // this is your Zend_Form
    if ($form->isValid($_POST)) {
        // success!
    } else {
        // failure!
    }
}

Нет необходимости использовать возможности рендеринга Zend_Form, если вы этого не хотите.

Второй вариант - объединить вашу пользовательскую разметку с элементами формы:

// view-script with $form being the the Zend_Form passed into the view
<form method="<?php echo $form->getMethod() ?>" action="<?php echo $form->getAction()?>">
    <div id="elements">
        <?php echo $form->element1->renderLabel() . $form->element1->renderViewHelper() ?>
        <br />
        <?php echo $form->element2->renderLabel() . $form->element2->renderViewHelper() ?>
    </div>
    <div id="buttons">
        <?php echo $form->button1->renderViewHelper() ?>
        &nbsp;
        <?php echo $form->button2->renderViewHelper() ?>
    </div>
</form>

В качестве альтернативы, если вы хотите только отфильтровать и проверить свой ввод, вы можете избежать всего раздутия Zend_Form и использовать _ 6_, что просто озвучивается Zend_Form без всякой разметки. Поскольку Zend_Filter_Input может использовать все стандартные и настраиваемые фильтры и валидаторы, которые вы можете использовать с Zend_Form, переход должен быть довольно простым.

person Stefan Gehrig    schedule 18.11.2009
comment
Все, что я действительно хочу получить от рендера, - это ошибки валидации и значения формы :) - person Valentin Golev; 18.11.2009

Есть гораздо более изящный способ сделать это с помощью декоратора форм ViewScript, специально разработанного для рендеринга форм в настраиваемую разметку. Он работает аналогично примеру, приведенному Стефаном, но вы можете использовать свои собственные скрипты или партиалы, и вам нужно делать гораздо меньше работы, если все, что вы хотите сделать, это поместить элементы, их метки и ошибки в настраиваемую разметку.

См. Официальное справочное руководство и, в частности, в этой статье для разработчиков Zend о Zend.

person David Snabel-Caunt    schedule 22.11.2009