5

有没有一种可靠的方法来为 a 创建自定义视图Zend_Form?装饰器非常神秘,有时以奇特的方式使用它们非常复杂,以至于我宁愿只手动编写 HTML。有没有办法做到这一点并且仍然使表单与控制器完全合作(例如,调用$form->isValid()并期望一切都能正确验证)?如果是这样,是否有任何需要注意的警告(例如注意验证错误显示)?

理想的解决方案是创建一个表单并传递元素数组(包含必要的数据,如名称、ID、输入类型以及呈现 HTML 所需的所有数据)——Zend 框架允许这样做吗?

[编辑]

echo我尝试在视图中添加这段代码(一个简单的登录表单),而不是仅仅输入表单对象:

<?php
$userid = $this->form->getElement('userid');
$pass = $this->form->getElement('password');
$remember = $this->form->getElement('remember');
$submit = $this->form->getElement('submit');
?>
<form enctype="<?php echo $this->form->getEnctype(); ?>" method="<?php echo $this->form->getMethod(); ?>" action="<?php echo $this->form->getAction(); ?>" id="<?php echo $this->form->getId(); ?>">
name: <input type="text" id="<?php echo $userid->getId(); ?>" name="<?php echo $userid->getName(); ?>" /><br />
pass: <input type="password" id="<?php echo $pass->getId(); ?>" name="<?php echo $pass->getName(); ?>" /><br />
remember: <input type="checkbox" id="<?php echo $remember->getId(); ?>" name="<?php echo $remember->getName(); ?>" /><br />
submit: <input type="submit" id="<?php echo $submit->getId(); ?>" name="<?php echo $submit->getName(); ?>" value="<?php echo $submit->getValue(); ?>" />
</form>

该表单似乎可以正常工作并验证(尽管我没有被重定向到我来自的页面 - 但我相信这是一个不同的问题,因为我通过它GET而不是在表单中)。这是可以接受的,还是我在不知不觉中做错了什么?

4

1 回答 1

2

很大程度上取决于设计和最终布局。

您想在哪里显示验证错误?如何?通过错误装饰器?
您还想使用描述吗?
你需要使用其他装饰器吗?

最好的方法似乎是只创建自己的Zend_Form_Element_ThreadIcons元素。这就像子类化一个Zend_Form元素并实现_render()返回您需要的 HTML 的自定义方法一样简单。您甚至可以在View那里使用您自己的实例。

然后,您可以将图标数组作为元素选项传递并按您需要的方式处理它。

如果您决定使用装饰器,您会发现此演示文稿对掌握该技术非常有用:

于 2011-01-28T21:26:11.170 回答