老夫个人觉得 zf看上去 有官方文档的支持 还有中文化的文档 但其实zf的文档不是很全 中文化的进度总是不同步 你需要的东西都不能在文档中找到 en 这里记录下zend_form组件
zend_form是zf中用于生成表单的一个组件 他有2个很晕的特点 第一就是慢 速度非常慢 有2个text段 1个submit按钮的表单生成出来大约需要半秒的时间 这是很慢的 第二是思路很奇怪 虽然zf本身就是为了mvc而生的 form这部分应该算做model 但是 zend_form有自己的view层 也就是装饰器 decorator
这里就说下装饰器 zend_form是最外层 先不说这个 我们先说里面被包裹的zend_form_element 也就是比如按钮 text字段 password字段 checkbox这类东西的装饰器 默认顺序是四个 viewhelper,errors,htmltag,label 这四个具体的意思是 viewhelper是一个助手 他会识别element种类 生成基础代码 比如zend_form_element_text是一个字段输入框体 viewhelper会自动帮你找到formtext这个额外的助手 产生代码如下
-
<input name="foo" id="foo" type="text" value="" />
接下来errors装饰器接管 如果有表单提交的错误反馈 会渲染出来 产生如下
-
<input name="foo" id="foo" type="text" value="" />
-
<div class="error">
-
<ul>
-
<li>...</li>
-
</ul>
-
</div>
接着htmltag装饰器接手 默认就是加上dd标签
-
<dd><input name="foo" id="foo" type="text" value="" />
-
<div class="error">
-
<ul>
-
<li>...</li>
-
</ul>
-
</div>
-
</dd>
最后 如果label被设置 label装饰器 启动增加一个默认dt标签
-
<dt><label for="foo" class="optional">Foo</label>
-
<dt>
-
<dd><input name="foo" id="foo" type="text" value="" />
-
<div class="error">
-
<ul>
-
<li>...</li>
-
</ul>
-
</div>
-
</dd>
于是 一个element就这样渲染出来了 eee
zend_form渲染器就是 先渲染每一个element 如上步骤 然后渲染htmltag 然后渲染form 一个表单就这样出来了 .......zend_form可以和zend_dojo以及zendx_jquery的装饰器有机的统一 不过jquery部分目前稍微弱点 dojo的部分目前整合的最强大 en
发表评论