将一个常规变量添加到自动连线功能
问题描述:
我正在使用Slim Framework和PHP-DI为我自动导入依赖关系。但是一个依赖只是一个常规数组。如果我将一个常规数组放入我的容器配置中,则所有数组都将被设置为该数组。所以我的主要问题是:将一个常规变量添加到自动连线功能
如何注入只有一个变量,而让容器自动连线剩下的?这可能吗?我发现自己写这样的路线:
$app->get('/userConfig', function (
Request $request,
Response $response,
Preferences $prefs,
UserConfig $userconfig)
{
$myArray = ['Thing1','thing2','thing3'];
return $userconfig->configView($request, $response, $myArray, $prefs);
});
而我其他的途径是短这样的,因为他们只对不同类别的依赖关系:
$app->get('/testPage', ['\Test','myTestPage']);
我写的所有多余的东西只是为了将$myArray
压入configView函数,有没有办法将常规的依赖注入与自动装配结合起来?任何框架或图书馆是否都这样做?
我刚才写它像这样,如果我没有需要一个数组:
$app->get('/userConfig', ['\UserConfig','configView']);
或者,我可以伸入容器,并获得阵列,但是这将让页面功能取决于容器,这是应该避免的。
答
我需要使用容器的call()函数。正如你在问题中看到的那样,configView还有一个“Preferences”参数,但是我不必传递它,容器为我做了。我不知道如何将它传递的参数部分集合,这是多么,如在呼叫(的第二个参数,像这样的阵列):
$app->get('/userConfig', function (
Request $request,
Response $response
){
$myArray = ['Thing1','thing2','thing3'];
return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]);
});
的关键部分是[$request,$response,$myArray]
并且不需要所有其他参数。在我的例子中只有一个,但我的实际对象有5个,我想知道如何避免处理其他参数,这是如何...
答
你不能只用自动装配来解决这个问题。你必须写一个位配置的注入你的阵列到你需要的类:http://php-di.org/doc/php-definitions.html
参见此处了解如何建立一个配置文件,搭配修身和PHP-DI:http://php-di.org/doc/frameworks/slim.html#configuring-php-di
我已经添加到容器的值。但我不想从课堂内部调用容器,我想注入它们,注入容器并调用它会打败DI的目的,并且座右铭:“告诉,别问。”。 – adjenks