2016-07-13 3 views

답변

1

Yii::$app->componentName을 통해 응용 프로그램의 어느 곳에서나 모든 구성 요소에 액세스 할 수 있습니다.

하지만이 방법을 직접 그렇게하는 것은 좋지 않다고 생각합니다.

적어도 구성 요소를 격리 시키려면 componentName이 부모 응용 프로그램 구성의 대상이라는 것을 명심해야합니다. 최소로, 참조 구성 요소의 이름을 종속 구성 요소 구성에 포함시켜야합니다. 에서

당신의 components/MyComponent.php :

class MyComponent extends Component 
{ 
    public $referencedComponentName = 'defaultName'; 
    ... 
} 

config/web.php에서 :

use yii; 
... 
class MyComponent extends Component 
{ 
    ... 
    public function getReferencedComponent() 
    { 
    return \Yii::$app->get($this->referencedComponentName); 
    } 

그러나이 방법 :

... 
components => [ 
    'myComponent' => [ 
    ... 
    'referencedComponentName' => 'otherComponent' 
    ] 
] 

그래서 당신은 당신의 부품과 같은 코드의 다른 comonent를 호출 할 수 있습니다 아주 좋은하지.SOLID 종속 역전 원칙에 따르면 더 좋은 방법은 부모 응용 프로그램 구성에 구현 될 참조 된 구성 요소 (exampe의 인터페이스)에 대한 일부 추상화를 정의하는 것입니다. 하지만 여기서는 귀중한 예제 인 을 제공하지 못합니다. 특정 작업과 응용 프로그램 구조를 모르기 때문입니다.

+0

정교한 답변을 주셔서 감사합니다 [@ maxim-korshunov] (http://stackoverflow.com/users/6479466). 나는 네가 모든면에서 옳다고 생각한다. – twigmac

관련 문제