1

我有一个记录器类(Application\Debug\Logger),用于将整个应用程序中的各种调试消息记录到日志文件中。我想使用简单的别名'logger'来获取该类的实例。所以我尝试配置 Zend\Di\Di,以便我可以在模块控制器或其他应用程序组件中执行类似的操作:

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

为了实现这一点,我在 Application/config/module.config.php 中有这个:

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

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

4

1 回答 1

0

我找到了我的问题的部分解决方案。我注意到,当我调用 ServiceManager 时,它还使用依赖注入配置来找到合适的类,所以我可以调用:

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

在控制器中通过为 DI 配置的别名获取记录器实例。

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

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

它的工作原理与之前的 di config 示例相同。但是我仍然不完全了解如何正确使用 DI,所以如果有人可以向我解释一下,我将不胜感激。

于 2012-12-18T09:46:25.427 回答