2016-07-13 64 views

回答

1

您可以通過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),這將在父應用程序配置中實現。但在這裏我不能提供有價值的例子 因爲我不知道你的特定任務和應用程序結構。

+0

感謝[@ maxim-korshunov](http://stackoverflow.com/users/6479466)的精心解答。我想你在各方面都是對的。 – twigmac

相關問題