簡體   English   中英

引用定義為多維數組的PHP-DI定義

[英]Referencing PHP-DI definitions defined as multi-dimensional arrays

如果我有如下所示的定義數組,則可以完美地執行在其他對象中注入RouteCollector實例:

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定義中引用其元素?

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相應的完全限定的類名(例如\\FastRoute\\RouteParser\\Std )作為參數傳遞給constructorParameter方法。 通常,它是關於引用數組中定義的config選項。

謝謝您的支持。

這是不可能的。 但是,您可以執行以下操作(但它不太可讀):

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

在未來的v6.0中,您還可以刪除DI\\factory並直接放入封蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM