gpt4 book ai didi

php - Zend Framework 表单、装饰器和验证 : should I go back to plain HTML?

转载 作者:IT王子 更新时间:2023-10-28 23:56:34 28 4
gpt4 key购买 nike

我目前正在开发一个包含大量表单的大型应用程序。

到目前为止,我一直在手工编写表单并编写自己的验证逻辑,但我决定是时候开始使用 Zend_Form 及其内置的验证例程了。

但是,我不断遇到越来越多关于(缺乏)灵 active 的问题 Zend_Form_Decorator .向单个输入元素添加额外按钮等简单任务变得异常困难。

我现在已经到了认真考虑放弃 Zend_Form_Element 的地步+ Zend_Form_Decorator完全接近,但我不想失去优秀的验证选项。

基本上,我想要两全其美:

  • 以最终用户看到的方式编写表单:在纯 HTML 中
  • 在不破坏太多 ZF 标准行为的情况下轻松将服务器端验证添加到表单字段

我正在考虑的一个可能的解决方案是在服务器端和在 View 中编写表单。这将使我能够轻松地验证我自己的表单,但(在我看来相当大的)缺点是每个表单都应该定义两次,这感觉完全错误。

是否有执行此操作的指南?你们中有人遇到过同样的情况吗?如果有,您是如何解决这些问题的?

我非常想听听您的观点。

最佳答案

我也发现默认装饰器是一个巨大的痛苦。我理解为什么它们是这样的,但我认为“不便因素”被严重低估了。

无论如何,我建议使用 ViewScripts为您的表格。请注意,这些与 View 不同——相反,ViewScript 在您的 Form 类中被显式引用,充当各种“ subview ”并允许您控制每个元素的布局。过去很难找到如何使用 ViewScripts 的示例,但我会尝试提供一些有用的东西。

首先,覆盖表单类中的 loadDefaultDecorators:

public function loadDefaultDecorators() {
$this->setDecorators(
array(
array('ViewScript',
array('viewScript' => 'foo/bar.phtml')
)
)
);
}

这将引用位于 /views/scripts/foo 中名为 bar.phtml 的 ViewScript。请注意上面“ViewScript”和“viewScript”中区分大小写的区别。

接下来,您必须调整应用于每个元素的装饰器,以确保它可以显示,但没有烦人的 dt/dd 包装器。例如:

$baz = new Zend_Form_Element_Text('bazInput');
$baz->setDecorators(array('ViewHelper','Errors'));

最后,您需要构建您的 ViewScript,例如:

<form method="post" action="<?php echo $this-element->getAction() ?>">
<table>
<tr>
<td><label for="bazInput">Baz:</label></td>
<td><?php echo $this->element->bazInput ?></td>
</tr>
</table>
<input type="submit" value="Submit Form" />
</form>

显然这是一个非常简单的示例,但它说明了如何引用表单元素和表单操作。

然后在您的 View 中,像往常一样简单地引用和输出您的表单。通过这种方式,您可以更好地控制表单布局——包括轻松添加 Javascript。

我相信这种方法可以解决您的两个要求:您可以用纯 HTML 构建表单,并且仍然可以利用 Zend Form 验证机制。

关于php - Zend Framework 表单、装饰器和验证 : should I go back to plain HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277849/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com