从其他组件访问应用程序组件是不是一种不好的做法?如果是的话:为什么?如果不是:这样做的最佳做法是什么?我在指南中没有找到任何关于这个问题的好建议。
答案 0 :(得分:1)
您可以通过Yii::$app->componentName
从应用程序的任何位置访问任何组件。
但我不认为直接以这种方式做这是一个好习惯。
至少,为了保持组件的隔离,您应该记住componentName
是一个主题op父应用程序配置。
因此,您应该将引用组件的名称包含在依赖组件配置中。
在components/MyComponent.php
:
class MyComponent extends Component
{
public $referencedComponentName = 'defaultName';
...
}
在config/web.php
:
...
components => [
'myComponent' => [
...
'referencedComponentName' => 'otherComponent'
]
]
因此,您可以在组件代码中调用其他组件,如下所示:
use yii;
...
class MyComponent extends Component
{
...
public function getReferencedComponent()
{
return \Yii::$app->get($this->referencedComponentName);
}
但这种方式也不是很好。根据SOLID Depenency inversion原则,更好的方法是定义一些抽象 引用的组件(例如接口),它将在父应用程序配置中实现。但在这里,我无法提供有价值的例子 因为我不知道你的特定任务和申请结构。