【问题标题】:Where to put a class that is not a controller, module or view?将不是控制器、模块或视图的类放在哪里?
【发布时间】:2013-02-06 04:10:47
【问题描述】:

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

目前的应用布局是这样的:

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

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

【问题讨论】:

    标签: class logging module zend-framework2 autoload


    【解决方案1】:

    我建议使用ServiceManager 而不是调用静态方法,这样可以让您在以后需要时更轻松地更换日志记录类。

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

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

    如果您看到此代码在其他项目中被重用,也可以创建一个 Logger 模块。

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

    【讨论】:

      【解决方案2】:

      我把大家都可以接受的通用类放在 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'));
                  },
          );
      }
      

      【讨论】:

        猜你喜欢
        • 2010-12-08
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        相关资源
        最近更新 更多