2012-12-17 46 views
1

我有一个记录器类(Application \ Debug \ Logger),用于记录从整个应用程序到日志文件的各种调试消息。 我想使用简单的别名'记录器'来获得该类的实例。 所以我尝试配置的Zend \迪\迪,这样我就可以在做这样的事情,例如,模块控制器或其他应用程序组件:配置用于Zend Di Di的类别别名

$di = new \Zend\Di\Di(); 
$logger = $di->get('logger'); 
//$logger should be Application\Debug\Logger instance... 

要做到这一点,我有这样的应用程序/配置/module.config.php:

'di' => array(
    'instance' => array(
     'alias' => array(
      'logger' => 'Application\Debug\Logger', 
     ), 
    ), 
) 

但问题是:别名'记录器'不起作用。我可以使用Di并通过全名(Application \ Debug \ Logger)获取类,但不能通过别名(我得到错误:类记录器无法位于提供的定义中)。我想我必须以某种方式将配置传递给Di,但我不知道如何。你可以帮我吗?

回答

0

我发现我的问题的部分解决方案。我注意到,当我打电话的ServiceManager,它也使用依赖注入配置,以找到合适的课,所以我可以打电话:

$logger = $this->getServiceLocator()->get('logger'); 

在控制器通过配置为DI别名得到的记录器实例。

所以在我的配置文件我也可以把:

'service_manager' => array(
    'invokables' => array(
     'logger' => 'Application\Debug\Logger', 
    ) 
), 

和它的工作原理相同,前面的双配置的例子。 但我还是不完全了解如何正确使用DI,所以如果有人能向我解释,我将不胜感激。