我想使用 Zend_Form 因为它的验证和过滤器等。但是表单的标记已经完成。更糟糕的是,它不是很标准化,所以编写我的自定义装饰器不是一个解决方案。
有没有一种简单的方法可以将 Zend_Form “应用”到现有的非常自定义的标记中?我认为这是一个普遍的问题。
我想使用 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() ?>
<?php echo $form->button2->renderViewHelper() ?>
</div>
</form>
或者,如果您只想过滤和验证您的输入,您可以避免所有的膨胀Zend_Form
和使用Zend_Filter_Input
,简单地说,Zend_Form
没有所有标记的东西。由于Zend_Filter_Input
可以使用您可以使用的所有标准和自定义过滤器和验证器Zend_Form
,因此转换应该相当容易。
使用 ViewScript 表单装饰器有一种更简洁的方法,专门用于将表单呈现为自定义标记。它的工作方式与 Stefan 给出的示例类似,但您可以使用自己的脚本或部分,如果您只想将元素、它们的标签和错误放入自定义标记中,则需要做的工作要少得多。
请参阅官方参考指南,更具体地说是这篇 Zend devzone 文章。