引用定义为多维数组的 PHP-DI 定义



如果我有如下定义数组,则在其他对象中注入RouteCollector实例可以完美执行:

use MyAppRoutingRouteCollector;
return [
    'router.options.routeParser' => 'FastRoute\RouteParser\Std',
    'router.options.dataGenerator' => 'FastRoute\DataGenerator\GroupCountBased',
    RouteCollector::class => DIobject()
            ->constructorParameter('routeParser', DIget('router.options.routeParser'))
            ->constructorParameter('dataGenerator', DIget('router.options.dataGenerator')),
];

但是,如果我将router.options定义定义为数组,有没有办法达到相同的结果? 例如,如何在RouteCollector::class定义中引用其元素?

use MyAppRoutingRouteCollector;
return [
    'router.options' => [
        'routeParser' => 'FastRoute\RouteParser\Std',
        'dataGenerator' => 'FastRoute\DataGenerator\GroupCountBased',
    ],
    RouteCollector::class => DIobject()
            ->constructorParameter('routeParser', <ASKING>)
            ->constructorParameter('dataGenerator', <ASKING>),
];

请注意,这不是将相应的完全限定类名(如FastRouteRouteParserStd(作为参数传递给constructorParameter方法。一般来说,这是关于引用数组中定义的配置选项。

感谢您的支持。

这不可能开箱即用。但是,您可以执行以下操作(但它的可读性不是很好(:

RouteCollector::class => DIobject()
        ->constructorParameter('routeParser', DIfactory(function ($c) {
              return $c->get('router.options')['routeParser'];
          }))

在未来的v6.0中,您还可以删除DIfactory并直接关闭。

相关内容

  • 没有找到相关文章

最新更新