繁体   English   中英

Zendframework2依赖注入混淆

[英]Zendframework2 Dependency Injection Confusion

我对DI如何与ZF2一起工作有点困惑。 我花了最近几天试图绕过它。 虽然我已经取得了一些进展,但仍然让我感到困惑......

使用这个(http://akrabat.com/getting-started-with-zend-framework-2/)教程,我设法掌握了以下内容:

'di' => array('instance' => array(
        'alias' => array(
            'album' => 'Album\Controller\AlbumController',
        ),
        'Album\Controller\AlbumController' => array(
            'parameters' => array(
                'albums' => 'Album\Model\Albums',
            ),
        ),

因为在我们的Album Controller类中我们有一个setAlbum函数。 所以当DI类调用setAlbums函数并将其传递给'Album \\ Model \\ Albums'类时。

很好,没问题..

现在让我们看看这个(它出现在zend网站的骨架应用程序中)

            'Zend\View\HelperLoader' => array(
            'parameters' => array(
                'map' => array(
                    'url' => 'Application\View\Helper\Url',
                ),
            ),
        ),

现在我希望在Zend \\ View \\ HelperLoader(或一个继承的类)中包含一个set类()函数,DI类将传递一个数组。 但事实并非如此。 因为我无法在任何地方找到setMap。

我的问题首先是我不了解DI与ZF2的工作方式...但是上面的代码(关于zend \\ view \\ helper)实际上做了什么。 我的意思是将'map'=> array('url'=>'Application \\ View \\ Helper \\ Url')注入Zend \\ View \\ HelperLoader实际上是做什么的?

感谢任何人都能给予的帮助。 我很欣赏它是一个beta框架,我现在可以得到的答案在几个月后不适用。 但这一切似乎都很基础,我只是没有得到它!

ZF2的DI配置确实与签名中的参数名称一致。 如果使用构造函数或显式setter完成此操作并不重要。 但是,setter必须以“set”开头才能被Zend\\Di\\Di识别。

所以如果你有这样一个类:

<?php

namespace Foo;

class Bar
{
    public function __construct ($baz) {}
    public function setSomethingElse ($bat) {}
}

你可以注入$baz$bat

'di' => array(
    'instance' => array(
        'Foo\Bar' => array(
            'parameters' => array(
                'baz' => 'Something\Here',
                'bat' => 'Something\There',
            ),
        ),
    ),
)

对于Zend\\Di ,函数名称究竟是什么并不重要,只要它以“set”开头并且参数的名称是正确的。 这就是为什么Foo\\Bar::setSomethingElse($bat)就像Foo\\Bar::setBat($bat)

只需确保正确命名您的参数。 例如,很容易做到这样的事情:

<?php

namespace Foo;

class Bar
{
    public function setCacheForBar ($cache) {}
    public function setCacheForBaz ($cache) {}
}

但这与Zend\\Di不能很好地协同工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM