我已多次阅读本手册,我已经仔细阅读了Google提供的有关该主题的帖子,我甚至买了几本与ZF有关的书籍.现在,为什么我仍然困惑?
我可以使用Zend_Form创建一个验证和运行正常的表单.我无法做到的是一个看起来完全像我希望它看到我想要它的错误消息的表单.我想要自定义按钮,我想要时髦的布局,我想在表单中间插入文本等.
有没有人有一种简单的方法来实现这些事情?让我觉得这个框架的东西能节省我的时间而不是花钱吗?我可以放弃Zend Form ...制作我自己的表单,让它的动作点击页面来验证和处理发布的数据,我可以尽可能快地打字,但我真的想"得到"这个并且能够使用它,因为它显然是有意的.
有什么建议?任何简单的"如何"的自定义按钮,时髦的布局和基本(或者相当高级,因为有大量的基本教程可以跳过更难的问题)"使用zend形式完成任务"?
巴雷特康拉德的建议就是我所建议的.另外,请记住,您不需要使用表单对象来呈现表单.
您可以做的一件事是在视图脚本中创建一个表单,该表单具有与表单类同名的元素.
您的HTML表单:
你的班:
class LoginForm extends Zend_Form { public function init() { $username = $this->createElement('text','username'); $username->setRequired(true); $this->addElement($username); $password = $this->createElement('password','password'); $password->setRequired(true); $this->addElement($password); } }
您的表单类反映了您的HTML表单,您的类中的每个元素都有自己的验证器和要求.回到您的操作中,您可以创建表单类的实例,并针对该表单验证您的post/get vars:
$form = new LoginForm(); if ($this->_request->isPost()) { if ($form->isValid($this->_request->getParams())) { // do whatever you need to do } else { $this->view->errors = $form->getMessages(); } }
您可以使用此方法在一个组中的表单顶部显示错误消息.
这是一个基本示例,但它允许您完全控制表单的表示,而无需花时间学习使用装饰器.在我看来,Zend_Form的大部分优势在于其验证和过滤属性.这给了你力量.回到这样的解决方案的主要原因是您的视图脚本HTML表单可能与您的表单类不同步.
例如,在视图中单独渲染每个元素
这保持了使用Zend_Form视图助手的能力(即,在验证失败时显示错误消息并维护表单字段的值),但为您提供完全自定义功能.
如果你想更进一步,然后关闭各个表单元素的默认装饰器,然后附加你自己的进一步自定义使用的标签(即错误消息和标签)或根本不使用装饰器(其他而不是渲染表单元素本身)然后手动编写所有周围的HTML.完整的自定义功能,同时在表单级别和视图级别都不会失去Zend_Form的优势.
Matthew Weier O'Phinney已经发布了一系列关于Zend_Form装饰器的博客文章:
最简单的Zend_Form装饰器
由内而外:如何分层装饰器
单独渲染Zend_Form装饰器
创建复合元素
目前我们已经获得了新的闪亮的Zend\Form
,它比旧的组件更复杂,但也更加可控,封装和强大.所以,我在下面说的不适用.新的组件是恕我直言,因为它...
...让您完全控制渲染表单的方式,您需要编写更多的视图代码,但这是值得的
...将数据,逻辑和视图分离到最大程度
...使用HTML5表单元素
...为您提供了多种选择,如何将表格放在一起,例如水合,注释等.
我可能无法帮助,因为我有完全相同的问题.我认为Zend_Form装饰器功能强大,但到目前为止我见过的程序员友好且不直观的ZF,我已经在各种项目中使用了ZF的主要部分.
那说我只能从我的经验中给出一些提示:
过滤器易于使用而无需使用表格
大多数(如果不是全部)你想要实现的东西都是在装饰者的帮助下完成的
我从小形式开始,一块一块地添加东西,但是我没有得到一些我在某些表格中做的东西,因为结果是基于试验和错误(主要是装饰器)
我从zend邮件列表中获得了我在网上找不到的信息
从相关问题到右侧,很明显Zend_Form缺乏全面的文档,特别是考虑到它的非直观性.我真的很想看到ZF的人就像Zend Framework一样对此做些什么.
所以这个答案可能只是让你知道你并不是唯一一个遇到这个问题的人.
或者你可以使用jedi心灵技巧当然!