我目前正在开发基于ZendFramework的某种Web应用程序。 在其中一个模块中,需要计算物品价格。 购买时,通过提供一些促销代码,客户可以获得一个或多个折扣。
我想把它当成装饰者(模式)。
基类计算价格(方法“getPrice”)可以由一个或多个装饰器类修改。他们每个人都可以减去一些价值。 因此,每个促销都有自己的类实现一些接口(例如使用方法“getPrice”)
当然示例是简化的;)
我的问题是,在目录结构*
中放置这一类(和接口)的位置*我正在使用默认的ZF模块化目录结构。
他们与模特有共同点,也许是帮助者?但绝对没有任何共同点......
另一件事是,它们应该与模块绑定,因此它们应该放在该模块文件夹中。
任何帮助,任何想法将不胜感激:)
答案 0 :(得分:2)
听起来您希望这些内容进入application/modules/somemodule/models
,因此像Somemodule_Model_SomePromotion
这样的类会驻留在application/modules/somemodule/models/SomePromotion.php
中。
我相信模块化设置的默认资源自动加载器将配置为加载具有该models
文件夹的帽子格式的类名称的模型。但如果没有,那么将以下内容添加到模块(不是应用程序)Bootstrap:
protected function _initResourceLoader()
{
$resourceLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Somemodule_',
'basePath' => dirname(__FILE__),
'resourceTypes' => array(
'models' => array(
'namespace' => 'Model_',
'path' => 'models',
),
),
));
}
更新
@ brady.vitrano的每条评论:如果模块引导程序扩展Zend_Application_Module_Bootstrap
,那么包含此映射的资源自动加载器将免费提供。除非您希望添加其他资源类型,否则无需手动包含它。
答案 1 :(得分:1)
您应该像这样构建自己的库:
/application
/modules
// Module structure
/library
/Package
/Subpackage
/ClassName.php
/Zend
// Zend Framework Files
您的班级名称为Package_Subpackage_ClassName
。您还应将Package_
前缀添加到自动装带器。