YII는 기본적으로 컨테이너 기반 접근 방식을 통해 의존성 주입에 대한 강력한 지원을 제공합니다. 기본 구현을 위해 타사 DI 컨테이너를 명시 적으로 사용할 필요는 없습니다. YII의 내장 의존성 주입 메커니즘은 클래스 특성 및 생성자 주입의 개념을 활용합니다. 구현 방법은 다음과 같습니다.
1. 종속성 정의 : 클래스에서 종속성을 유형 힌트와의 속성으로 선언하십시오. 이를 통해 YII는 유형에 따라 종속성을 자동으로 해결할 수 있습니다.
<code class="php">class MyController extends \yii\web\Controller { public $userService; public function __construct($id, $module, UserService $userService) { parent::__construct($id, $module); $this->userService = $userService; } public function actionIndex() { $users = $this->userService->getAllUsers(); // ... rest of your code } }</code>
2. 레지스터 종속성 (필요한 경우) : 종속성 (예제의 UserService
와 같은)이 내장 된 YII 구성 요소가 아니거나 자동으로 등록 된 경우 응용 프로그램 구성에 등록해야합니다. 일반적으로 응용 프로그램의 구성 파일 ( config/web.php
또는 config/console.php
)에서 수행됩니다.
<code class="php">return [ // ... other configurations 'components' => [ 'userService' => [ 'class' => 'app\services\UserService', ], ], ];</code>
이 구성은 YII에게 필요할 때마다 app\services\UserService
인스턴스를 작성하도록 지시합니다.
3. 종속성 사용 : 이제 MyController
직접 생성 할 필요없이 주입 된 userService
객체를 활용할 수 있습니다. YII의 컨테이너는 인스턴스화와 주입을 자동으로 처리합니다.
몇 가지 모범 사례는 YII에서 의존성 주입의 효과와 유지 관리를 향상시킵니다.
의존성 주입은 여러 가지 방법으로 유지 관리 가능성과 테스트 성을 크게 향상시킵니다.
YII에는 내장 DI 컨테이너가 있지만 Pimple, Symfony의 종속성 주입 구성 요소 및 기타 타사 컨테이너를 통합 할 수 있습니다. 그러나 이는 일반적으로 더 많은 구성이 필요하며 YII의 컨테이너가 충족하지 않는 특정 요구가 없다면 YII의 내장 시스템에 비해 상당한 이점을 제공하지 않을 수 있습니다.
타사 컨테이너를 통합하는 것은 일반적으로 다음과 같습니다.
일반적으로 YII의 내장 DI 기능으로 시작하는 것이 좋습니다. YII의 컨테이너 (예 : 특정 스코프, 게으른로드 등)가 제공하지 않는 고급 기능이 필요한 것과 같은 특정 이유가있는 경우 타사 컨테이너 만 고려하고 통합의 복잡성을 처리 할 준비가되어 있습니다. 혜택은 종종 대부분의 YII 프로젝트에 추가 된 복잡성을 능가하지 않습니다.
위 내용은 YII에서 의존성 주입을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!