[英]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.