使用 QuickForm 的大体步骤是
1 声明实体,定义 form 名字
2 添加元素,规则,过滤器
3 验证表单
4 显示表单
其中,在跟模板相结合使用的时候,模板页上一定要定义 <form {form_attributes}> ... </form>
这个 xxx_attributes 取决于定义的 QuickForm 名称
一个 Group 也是一个元素,可以稍候将他 remove 然后 add 一个同名的元素
我比较喜欢这么干,表单提交前,是一个 Submit 和 一个 Reset 作一个 Group
表单提交后 Remove 掉,替换成一个 link 和一个 static,static 内容是 <meta refresh> link 内容就是手动的链接,同时 freeze 住整个表单
addElement 可以接受不定数量的参数,代码里面的原型是 function &addElement($element) ,实际上,里面在调用 $this->_loadElement('addElement', $element, array_slice($args, 1)); 也就是说,第二个开始的所有参数,都会被送到指定元素类型的构造里面去,手册里面说
Parameters starting from second will be passed to the element's constructor, consult the docs for the appropriate element to find out which parameters to pass.
static 元素的内容接受 html 代码,我尝试过用它来显示自定义的出错信息,发现如果它的 text 属性为 NULL 或者 "" 的时候,errorTemplate 是出不来的,至少得给它的 text 属性留一个空格
有个QuickForm::addFormRule() 可以设定整个表单的回调验证,传入参数跟 onProcess 里面的一样,但是返回有点特殊,正确通过验证的话,要求返回 TRUE ,出错的话,要返回一个 array ("element" => "error message" ... ); 这里就会直接把出错信息输出到某元素的出错信息上了,返回值不能出差错,否则报一个 没头的 unknow error
addFormRule 注册的回调,是跟别的Rule处于同一级别的,没有依赖关系,也就是说,它不会等所有元素单独验证通过之后,再整合起来再做一次验证,这里是 QuickForm 可以改进的一个地方,现在没有提供这样有依赖性的再次校验的功能,也就是说,如果 onProcess() 里面的操作可能失败的话,就必须在里面,global 一个 QuickForm 出来再行操作 form,处理错误,整个逻辑就开始不清晰了,部分作错误处理的代码跟处理成功的代码揉到了一起,使得里面的代码复杂度提高,validate() 外面的处理也复杂起来,因为即使 validate() 通过了,仍然会扔出错误来,发生这种情况时 form 上面怎么规划显示,都得特别考虑
调试时,最好还是把 QuickForm 的 display() 打开,尽管已经用了模板,但是对某些元素的操作,还是原生的 display() 出来的表格看得最清楚
1098

被折叠的 条评论
为什么被折叠?



