在哪里放置一个不是控制器,模块或视图的类?

时间:2013-02-06 04:10:48

标签: class logging module zend-framework2 autoload

我有一个由几个模块组成的ZF2应用程序,我想创建一个Logger类,可以从任何这些模块访问。基本上,我希望能够使用简单的Logger::info("Something")从任何地方进行日志记录。

当前的应用程序布局如下:

root/
  module/
    module1/
      src/
        module2/
          src/
        module3/
          src/

放置这个新记录器类的最佳位置在哪里?以及如何确保可以从任何子模块访问它?

2 个答案:

答案 0 :(得分:1)

我建议使用ServiceManager而不是调用静态方法,如果需要,这将允许您更容易地更换日志记录类。

此外,ZF2模块在如何构建代码方面非常灵活,因此您可以简单地使用:

module/Application/src/Application/Logger/LoggerFactory.php

如果您看到此代码在其他项目中重复使用,或者可能创建一个Logger模块。

我确实看到Rob Allen昨天发布了一篇关于模块目录结构的博客文章 - http://akrabat.com/zend-framework-2/thoughts-on-module-directory-structure/ - 可能值得快速阅读。

答案 1 :(得分:0)

我在module / Application / src / WhateverName

下放置了所有应该可以接受的通用类

例如,我将auth类放在:

module/Application/src/Application/Authentication/AuthenticationService.php

使用命名空间:

namespace Application\Authentication;

然后我在Module.php中定义服务

public function getServiceConfig()
{
    return array(
        'factories' => array(
            'auth_service' => function ($sm) {
                $zfauthservice = new \Zend\Authentication\AuthenticationService;
                return new \Application\Authentication\AuthenticationService($zfauthservice, $sm->get('bp_user_mapper_model'));
            },
    );
}