首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用定义为多维数组的PHP-DI定义

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

Stack Overflow用户
提问于 2018-01-11 21:59:45
回答 1查看 208关注 0票数 0

如果我有一个像下面这样的定义数组,那么在其他对象中注入RouteCollector实例就可以完美地执行:

代码语言:javascript
复制
use MyApp\Routing\RouteCollector;

return [
    'router.options.routeParser' => 'FastRoute\\RouteParser\\Std',
    'router.options.dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
    RouteCollector::class => DI\object()
            ->constructorParameter('routeParser', DI\get('router.options.routeParser'))
            ->constructorParameter('dataGenerator', DI\get('router.options.dataGenerator')),
];

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

代码语言:javascript
复制
use MyApp\Routing\RouteCollector;

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

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

谢谢您一直鼓励我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 22:41:44

这是不可能开箱即用的。但是,您可以这样做(但它的可读性不是很好):

代码语言:javascript
复制
RouteCollector::class => DI\object()
        ->constructorParameter('routeParser', DI\factory(function ($c) {
              return $c->get('router.options')['routeParser'];
          }))

在未来的v6.0中,您还可以删除DI\factory并直接放置闭包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48208808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档