我自学且不确定如何执行此操作,需要在任何地方访问我的config类的单个实例。可以使用DIC注入到任何地方,但我希望它可以动态工作。
我可以将类设为静态,但这是答案吗?即使在这里,DIC也可能毫无用处。如果有人可以在这里给我一些建议,我将非常感激。寻找一种干净的方式,而不是肮脏。
这是我当前用于注入控制器(例如模板)的设置。
$controllerRule = [
"constructParams" => [$dice->create("App\Providers\Template")],
"shared" => true,
];
$dice->addRule("App\Controllers\Frontend\LandingController", $controllerRule);
这是我当前使用DIC创建Config实例的方式。
$configRule = [
"constructParams" => ["example"],
"shared" => true,
];
$dice->addRule("App\Providers\Configuration", $configRule);
答案 0 :(得分:0)
最佳做法? 不要。
问一下自己:需要Config实例的类是否需要访问所有配置选项?
代替:
class HomeController {
private $numberOfItemsShown;
public function __construct(Config $config) {
$this->numberOfItemsShown = $config->get('homepage.number_of_items');
}
}
执行以下操作:
class HomeController {
private $numberOfItemsShown;
public function __construct(int $numberOfItemsShown) {
$this->numberOfItemsShown = $numberOfItemsShown;
}
}
如果一个类需要许多构造函数参数,则有两种选择。
一般的经验法则是,类应询问以获取其配置,而不是检索它。