将一个常规变量添加到自动连线函数
Adding one regular variable to auto-wired function
我正在使用带有 PHP-DI 的 Slim Framework 来为我自动装配依赖项。但是一个依赖项只是一个常规数组。如果我将一个常规数组放入我的容器配置中,那么所有数组都将设置为该数组。所以我的主要问题是:
如何只注入一个变量,同时让容器自动连接其余变量?这可能吗?我发现自己写了这样一条路线:
$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']);
或者,我可以进入容器并获取数组,但这会使页面功能依赖于容器,这是应该避免的事情。
你不能只用自动装配来解决这个问题。您必须编写一些配置才能将数组注入 类 您需要:http://php-di.org/doc/php-definitions.html
另请参阅此处了解如何使用 Slim 和 PHP-DI 设置配置文件:http://php-di.org/doc/frameworks/slim.html#configuring-php-di
我需要使用容器的 call() 函数。正如您在问题中看到的那样,configView 也有一个 "Preferences" 参数,但是我不必传递它,容器为我做了这个。我不明白如何向它传递部分参数集,这就是 call() 的第二个参数中的数组,如下所示:
$app->get('/userConfig', function (
Request $request,
Response $response
){
$myArray = ['Thing1','thing2','thing3'];
return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]);
});
关键部分是 [$request,$response,$myArray]
并且不需要所有其他参数。在我的示例中只有一个,但我的实际对象有 5 个,我想知道如何避免处理其他参数,这是如何...
我正在使用带有 PHP-DI 的 Slim Framework 来为我自动装配依赖项。但是一个依赖项只是一个常规数组。如果我将一个常规数组放入我的容器配置中,那么所有数组都将设置为该数组。所以我的主要问题是:
如何只注入一个变量,同时让容器自动连接其余变量?这可能吗?我发现自己写了这样一条路线:
$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']);
或者,我可以进入容器并获取数组,但这会使页面功能依赖于容器,这是应该避免的事情。
你不能只用自动装配来解决这个问题。您必须编写一些配置才能将数组注入 类 您需要:http://php-di.org/doc/php-definitions.html
另请参阅此处了解如何使用 Slim 和 PHP-DI 设置配置文件:http://php-di.org/doc/frameworks/slim.html#configuring-php-di
我需要使用容器的 call() 函数。正如您在问题中看到的那样,configView 也有一个 "Preferences" 参数,但是我不必传递它,容器为我做了这个。我不明白如何向它传递部分参数集,这就是 call() 的第二个参数中的数组,如下所示:
$app->get('/userConfig', function (
Request $request,
Response $response
){
$myArray = ['Thing1','thing2','thing3'];
return $this->call(['UserConfig', 'configView'],[$request,$response,$myArray]);
});
关键部分是 [$request,$response,$myArray]
并且不需要所有其他参数。在我的示例中只有一个,但我的实际对象有 5 个,我想知道如何避免处理其他参数,这是如何...