Dependency injection ZF2中的链接依赖项注入

Dependency injection ZF2中的链接依赖项注入,dependency-injection,zend-framework2,chaining,Dependency Injection,Zend Framework2,Chaining,我试图在ZF2中创建一个简单的电子邮件模板测试,我使用依赖项注入来创建一个PhpRenderer类的实例,并设置所有依赖项 似乎我正在努力链接注入,因为AggregateResolver中不存在路径“email” 内部module.config.php 'di' => array( 'instance' => array( 'Zend\View\Resolver\TemplatePathStack' => array( 'opti

我试图在ZF2中创建一个简单的电子邮件模板测试,我使用依赖项注入来创建一个PhpRenderer类的实例,并设置所有依赖项

似乎我正在努力链接注入,因为AggregateResolver中不存在路径“email”

内部module.config.php

'di' => array(
    'instance' => array(
        'Zend\View\Resolver\TemplatePathStack' => array(
            'options' => array(
                'script_paths'  => array(
                    'email' => __DIR__ . '/../view/application/email',
                ),
             ),
        ),
        'Zend\View\Resolver\AggregateResolver' => array(
            'attach' => array(
                'Zend\View\Resolver\TemplatePathStack',
            ),
        ),
        'Zend\View\Renderer\PhpRenderer' => array(
            'setResolver' => 'Zend\View\Resolver\AggregateResolver',
        ),
    ),
),
内部TestController.php

    $di = new \Zend\Di\Di;
    $renderer = $di->get('Zend\View\Renderer\PhpRenderer');
    $content = $renderer->render('email/test', null);

    echo($content);
信息:

    Zend\View\Renderer\PhpRenderer::render: Unable to render template "email/test"; resolver could not resolve to a file
任何帮助都将受到感激


写了以上内容后,我一直在玩游戏,并从di数组中删除了TemplatePathStack,但这根本没有任何效果,因此我不确定AggregateResolver是否正在使用它,因此这可能是一个链接问题:

'di' => array(
    'instance' => array(
        /*'Zend\View\Resolver\TemplatePathStack' => array(
            'addPaths' => array(
                'paths'  => array(
                    'email' => __DIR__ . '/../view/application/email',
                ),
             ),
        ),*/
        'Zend\View\Resolver\AggregateResolver' => array(
            'attach' => array(
                'Zend\View\Resolver\TemplatePathStack',
            ),
        ),
        'Zend\View\Renderer\PhpRenderer' => array(
            'setResolver' => 'Zend\View\Resolver\AggregateResolver',
        ),
    ),
),

Aborgrove

最后,我将di数组移出module.conf.php,并在module getServiceConf()方法中重新创建它,从而解决了这个问题。(虽然我不确定这是最好的地方)

然后将控制器更改为:

    $sm = \Application\Model\ServiceLocatorFactory::getInstance();
    $renderer = $sm->get('EmailPhpRenderer');
    $content = $renderer->render('test.phtml', null);

    echo($content);

乍一看,
TemplatePathStack
需要一个参数键
script\u paths
包含模板路径数组,但是您使用的是
setPaths
谢谢,我已经相应地编辑了di,也在上面的问题中。“options”数组是否应自动传递到TemplatePathStack的_构造方法中?因为我在_构造中得到了“options”数组的空值。
    $sm = \Application\Model\ServiceLocatorFactory::getInstance();
    $renderer = $sm->get('EmailPhpRenderer');
    $content = $renderer->render('test.phtml', null);

    echo($content);