0
訪問另一個組件的應用程序組件會不好嗎?如果是,爲什麼?如果不是,那麼最佳做法是什麼?我在指南中沒有爲這個問題找到任何好的建議。預見到從Yii2中的另一個組件訪問組件的方法?
訪問另一個組件的應用程序組件會不好嗎?如果是,爲什麼?如果不是,那麼最佳做法是什麼?我在指南中沒有爲這個問題找到任何好的建議。預見到從Yii2中的另一個組件訪問組件的方法?
您可以通過Yii::$app->componentName
從您的應用程序的任何位置訪問任何組件。
但我不認爲這是一個很好的做法,直接做到這一點。
至少,爲了保持組件隔離,您應該記住componentName
是一個主操作父應用程序配置。 因此,至少應該將引用組件的名稱包含到相關組件配置中。
在你components/MyComponent.php
:
class MyComponent extends Component
{
public $referencedComponentName = 'defaultName';
...
}
在config/web.php
:
...
components => [
'myComponent' => [
...
'referencedComponentName' => 'otherComponent'
]
]
所以,你可以調用其他comonent在組件代碼是這樣的:
use yii;
...
class MyComponent extends Component
{
...
public function getReferencedComponent()
{
return \Yii::$app->get($this->referencedComponentName);
}
但這種方式也不太好。根據SOLID Depenency倒置原則,更好的方法是定義一些抽象爲 引用組件(接口for exampe),這將在父應用程序配置中實現。但在這裏我不能提供有價值的例子 因爲我不知道你的特定任務和應用程序結構。
感謝[@ maxim-korshunov](http://stackoverflow.com/users/6479466)的精心解答。我想你在各方面都是對的。 – twigmac