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

是否有一种简单的方法将Zend_Form“应用”到现有的非常自定义的标记上?我认为这是一个普遍的问题。

最佳答案

如果您在手工制作的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的所有膨胀,而使用Zend_Filter_Input,简单地说,就是Zend_Form,而没有所有标记内容。由于Zend_Filter_Input可以使用您可以与Zend_Form一起使用的所有标准过滤器和自定义过滤器和验证器,因此过渡应该相当容易。

10-07 19:57
查看更多