使用现有标记呈现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给出的例子类似,但您可以使用自己的脚本或部分,如果您只想将元素,标签和错误放入自定义标记中,则需要做更少的工作。
查看Official Reference Guide,更具体地说,这个Zend devzone article。
我真的想从渲染得到的是验证错误和表单值:) – 2009-11-18 13:51:46