我使用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']);
或者,我可以进入容器并获取数组,但这会使页面函数依赖于容器,这是应该避免的。
答案 0 :(得分:1)
您无法仅通过自动装配解决此问题。您必须编写一些配置来将数组注入到您需要的类中:http://php-di.org/doc/php-definitions.html
另请参阅此处以了解如何使用Slim和PHP-DI设置配置文件:http://php-di.org/doc/frameworks/slim.html#configuring-php-di
答案 1 :(得分:0)
我需要使用容器的call()函数。正如你在问题中看到的那样,还有一个"偏好" configView的参数,但我不必传递它,容器为我做了这个。我没有理解如何传递部分参数集,这就是如何,作为call()的第二个参数中的数组如此:
$cars = [ 'all' =>
[
'brand' => 'Volvo',
'X' => 22,
'Y' => 28
],
[
'brand' => 'BMW',
'X' => 15,
'Y' => 13
]
];
foreach($cars['all'] as $car){
if($car['brand'] == 'Volvo') {
unset($car['brand']); // unset Volvo
}
}
关键部分是$app->get('/userConfig', function (
Request $request,
Response $response
){
$myArray = ['Thing1','thing2','thing3'];
return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]);
});
,不需要其他参数。在我的例子中只有一个,但我的实际对象还有5个,我想知道如何避免处理其他参数,这就是......