将一个常规变量添加到自动连线函数

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 个,我想知道如何避免处理其他参数,这是如何...