ZendFramework - 在模块化目录结构中放置其他类的位置?

时间:2011-08-03 07:09:39

标签: zend-framework structure

我目前正在开发基于ZendFramework的某种Web应用程序。 在其中一个模块中,需要计算物品价格。 购买时,通过提供一些促销代码,客户可以获得一个或多个折扣。

我想把它当成装饰者(模式)。

基类计算价格(方法“getPrice”)可以由一个或多个装饰器类修改。他们每个人都可以减去一些价值。 因此,每个促销都有自己的类实现一些接口(例如使用方法“getPrice”)

当然示例是简化的;)

我的问题是,在目录结构*

中放置这一类(和接口)的位置

*我正在使用默认的ZF模块化目录结构。

他们与模特有共同点,也许是帮助者?但绝对没有任何共同点......

另一件事是,它们应该与模块绑定,因此它们应该放在该模块文件夹中。

任何帮助,任何想法将不胜感激:)

2 个答案:

答案 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_前缀添加到自动装带器。