2010-06-30 72 views

回答

3

该类与其他任何类一样自动加载,因此没有“标准”地方。所以问题就变成了,你想在哪里生活?

我通常在模块化应用程序中遵循的约定是在模块中包含大部分内容,但注册应用程序名称空间并使用应用程序/模型作为'核心'类型类。所以你的情况,说你的应用程序的命名空间是WordPress的,你必须:

class Wordpress_Controller_Action extends Zend_Controller_Action 
{ 

} 

和文件将住在应用程序/模型/ WordPress的/控制器/ action.php的。

为了使这项工作,你需要在你的include路径的应用程序/模型,你要初始化的标准自动装载机,是这样的(在你的引导类):

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace('Wordpress_'); 

    return $autoloader; 
} 

或者你可以在application.ini中设置上述内容。

+0

确实有'标准'的地方。正如问题中提到的那样,ZF的新版本自动处理自动加载,不仅将'Namespace \ _Models \ _'映射到'application/models',而且'Namespace \ _Forms \ _'映射到'application/forms',并且'dbtable','mappers','插件','服务','viewhelper','viewfilter'相同。当然,我知道我可以将它放在'application/models'中,但这是我放置*模型的地方,而不是我的控制器。 – 2010-06-30 23:59:13

+0

我知道资源自动加载器是如何工作的。我的观点是没有控制器基类的标准位置,所以亲自把它放在模型目录中(因为IMO不是控制器,它只是它们使用的一个组件)。或者,你可以为控制器注册一个新的资源类型,并且拥有Namespace_Controller_Controller_Action,但是对于我想象中的只有一个类来说,这看起来像是过度杀伤。 – 2010-07-01 08:21:05

+0

我误解了你的第一行,意思是说你需要自动加载的类没有标准的地方(不仅仅是没有控制器类的地方),我的错误。看起来像'应用程序/控制器'可以在没有额外的级别的情况下使用(毕竟'真正'的控制器以'控制器'结束,这样可以帮助解决命名问题)。猜猜这是玩的东西。 – 2010-07-01 14:13:08