使用现有标记呈现Zend_Form的最佳方法

Val*_*lev 2 php zend-framework zend-form

我想使用Zend_Form,因为它的验证和过滤器等.但表单的标记已经完成.更糟糕的是,它不是很标准化,所以编写我的自定义装饰器不是一个解决方案.

是否有一种简单的方法可以将Zend_Form"应用"到现有的自定义标记中?我认为这是一个常见的问题.

Ste*_*rig 11

如果您在手工制作的HTML表单中使用相同的名称,则Zend_Form可以在数据接收时简单地实例化表单:

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

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>
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想过滤和验证您的输入,您可以避免所有膨胀Zend_Form和使用Zend_Filter_Input,简单地说,Zend_Form没有所有标记的东西.由于Zend_Filter_Input可以使用您能够使用的所有标准和自定义过滤器和验证器Zend_Form,过渡应该相当容易.