Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zendframework2依赖项注入混淆_Php_Configuration_Dependency Injection_Zend Framework2 - Fatal编程技术网

Php Zendframework2依赖项注入混淆

Php Zendframework2依赖项注入混淆,php,configuration,dependency-injection,zend-framework2,Php,Configuration,Dependency Injection,Zend Framework2,我对DI如何与ZF2一起工作有点困惑。过去几天我一直在想办法解决这个问题。虽然我已经取得了一些进步,但很多事情仍然困扰着我 用这个(http://akrabat.com/getting-started-with-zend-framework-2/)教程I成功地掌握了以下内容: 'di' => array('instance' => array( 'alias' => array( 'album' => 'Album\Controll

我对DI如何与ZF2一起工作有点困惑。过去几天我一直在想办法解决这个问题。虽然我已经取得了一些进步,但很多事情仍然困扰着我

用这个(http://akrabat.com/getting-started-with-zend-framework-2/)教程I成功地掌握了以下内容:

'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(或继承的类)中包含一个setMap()函数,DI类将传递一个数组。但情况似乎并非如此。因为我在任何地方都找不到setMap

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


谢谢任何人能给予的帮助。我很感激这是一个测试版框架,我现在可能得到的答案在几个月内不适用。但这一切似乎都很基本,我就是不明白

ZF2的DI配置确实与签名中的参数名称一起工作。无论是使用构造函数还是显式setter来完成,这都无关紧要。但是,setter必须以“set”开头,才能被
Zend\Di\Di
识别

所以,如果你有这样一门课:

<?php

namespace Foo;

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

namespace Foo;

class Bar
{
    public function setCacheForBar ($cache) {}
    public function setCacheForBaz ($cache) {}
}
对于
Zend\Di
函数名的确切名称并不重要,只要它以“set”开头并且参数的名称正确即可。这就是为什么
Foo\Bar::setSomethingElse($bat)
的工作原理与
Foo\Bar::setBat($bat)
一样

只要确保你的论点命名正确。例如,这样做很容易:

<?php

namespace Foo;

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

namespace Foo;

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

ZF2的DI配置确实与签名中的参数名称一起工作。无论是使用构造函数还是显式setter来完成,这都无关紧要。但是,setter必须以“set”开头,才能被
Zend\Di\Di
识别

所以,如果你有这样一门课:

<?php

namespace Foo;

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

namespace Foo;

class Bar
{
    public function setCacheForBar ($cache) {}
    public function setCacheForBaz ($cache) {}
}
对于
Zend\Di
函数名的确切名称并不重要,只要它以“set”开头并且参数的名称正确即可。这就是为什么
Foo\Bar::setSomethingElse($bat)
的工作原理与
Foo\Bar::setBat($bat)
一样

只要确保你的论点命名正确。例如,这样做很容易:

<?php

namespace Foo;

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

namespace Foo;

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

我想我现在已经解决了(大部分是…)func_get_args用于获取构造函数的参数名(即$map=null)。因此,在我上面的代码中('map'=>array('url'=>'Application\View\Helper\url')表示$map的构造函数将是array(array('url'=>'Application\View\Helper\url'))我通过将构造函数参数更改为$map1来测试这一点,导致上述参数停止工作。然后我将其更改为'map1'=>array,一切都重新开始工作。我想我现在已经解决了(大部分情况下…)func_get_args用于获取构造函数的参数名称(即$map=null)。因此在我上面的代码中('map'=>array('url'=>'Application\View\Helper\url')表示$map的构造函数将是array(array('url'=>'Application\View\Helper\url')。我通过将构造函数参数更改为$map1来测试这一点,导致上面的命令停止工作。然后我将其更改为'map1'=>array,一切又开始工作了。。