Php Zendframework2依赖项注入混淆
我对DI如何与ZF2一起工作有点困惑。过去几天我一直在想办法解决这个问题。虽然我已经取得了一些进步,但很多事情仍然困扰着我 用这个(http://akrabat.com/getting-started-with-zend-framework-2/)教程I成功地掌握了以下内容: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' => 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,一切又开始工作了。。