2011-08-03 28 views
0

我目前正在研究一些基于ZendFramework的Web应用程序。 在其中一个模块中,需要计算物料价格。 购买时,通过提供一些促销代码,客户可以获得一个或多个折扣。ZendFramework - 在模块目录结构中放置其他类的位置?

我想使它成为装饰(图案)。

基类计算价格(方法“getPrice”)可以由更多装饰类之一修改。他们每个人都可以减少一些价值。 所以,每次促销活动都有其自己的类实现一些接口(例如与方法“用getPrice”)

当然的例子是简化;)

我的问题是,在什么地方这串类(和接口)在目录结构*

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

他们有一些共同的模型,也许助手?但绝对没有什么共同的意见...

另一件事是,他们应该绑定模块,所以他们应该被放置在该模块文件夹。

任何帮助,任何想法可以理解的:)

回答

1

您应该构建自己的库这样的:

/application 
    /modules 
     // Module structure 
/library 
    /Package 
     /Subpackage 
      /ClassName.php 
    /Zend 
     // Zend Framework Files 

如果你的类名是Package_Subpackage_ClassName。您还应该将自己的Package_前缀添加到自动加载器。

+0

谢谢@adlawson 这是最简单的解决方案,但我认为,在主库dir中,应该只是应用程序范围的库,它扩展了ZF或提供了附加功能。 我要求的一个是模块特定的... – drep

2

听起来就像你想要这些进入application/modules/somemodule/models所以像Somemodule_Model_SomePromotion这样的类将驻留在application/modules/somemodule/models/SomePromotion.php

我相信模块化设置的默认资源自动加载器将被配置为从该models文件夹加载带有帽子格式的类名的模型。通过@

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,那么资源包含这个映射的自动加载器是免费的。除非您想添加其他资源类型,否则无需手动包含它。

+0

Friendly Note:在模块中扩展'Zend_Application_Module_Bootstrap' Bootstrap.php文件不需要使用'Zend_Application_Module_Autoloader'它可以在构造和加载所有的标准资源类型自动。如果你在你的application.ini文件中添加'appNamespace =''',那么在你的应用程序Bootstrap文件中不需要使用'Zend_Application_Module_Autoloader'。基本上,你不需要手动调用'Zend_Application_Module_Autoloader'。 –

+0

@brady。维特拉诺:谢谢你的抬头。我这么想,但不确定。我将编辑答案以包含您的信息。 –

+0

谢谢,但问题不是技术,所以不需要甚至一行代码;) 这是唯一的设计问题... 我不认为那种功能应该表示为模型。它是另一层,或者可能是模型帮手? 将它们(类)与通用模块模型放在一起是个不错的主意imho ... 我想在我的模块模型目录中创建另一个子文件夹。 再次: 你在哪里,在你的应用程序中,放置这种类型的功能类,不是ctrl/model/view和definitly不应该放在主“library”文件夹中,因为它们是模块特定的。 – drep

相关问题