如何使用Zend动态覆盖表单和/或视图?

时间:2010-07-29 14:49:45

标签: php zend-framework

我正在使用Zend开发一个Web应用程序,我们希望提供一些默认的表单和视图。我们希望客户端能够创建可以放在另一个可以覆盖默认表单的目录中的自定义表单和/或视图。 IE,Zend会检查是否存在任何自定义表单(或视图),如果存在,请加载,否则加载默认表单。

使用Zend可以吗?

我已经考虑过为默认只调用父构造函数的每个表单创建子类,但这看起来有点像黑客。

2 个答案:

答案 0 :(得分:3)

如何使用自定义和默认前缀/路径配置的工厂/服务类,其作用是实例化所请求的表单。这个工厂类的工作是首先检查是否存在自定义表单并回退到默认表单。

因此,您可以在My_Form_Default_User中显示名为application/forms/default的默认表单,并在My_Form_Custom_User中显示名为application/forms/custom的默认表单。然后客户端代码可以调用类似My_FormFactory::createForm('user')的内容。

另一种方法可能是为两种情况命名表单相同的内容(例如:My_Form_User),但随后使用两个位置的路径配置自动加载器。如果自动加载器找到自定义表单,请冷静。如果没有,它将回退到默认位置。但这种方法对我来说似乎有点儿了。

答案 1 :(得分:1)

这个怎么样?

在application.ini中有一个部分,在渲染视图之前将会读取该部分。默认设置将向您的控制器指示它必须加载您的表单,但如果客户端想要为给定视图加载自己的表单,那么他们只需从您的application.ini中删除相应的条目(您可能必须提供自定义application.ini,可以由客户自定义,但与您自己的应用程序使用的application.ini不同)