클래스의 생성자 DI에서 Context Object의 목적은 무엇입니까? 컨텍스트는 어떻게 작동합니까?


23

대부분의 클래스 생성자에서 Context 객체가 전달됩니다. 이 Context Obj의 작동 방식을 이해할 수 없었습니다. 또한 때때로 이것이 아래와 같이 부모 클래스의 생성자에게 전달되는 것을 알았습니다.

public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Catalog\Model\Design $catalogDesign,
    \Magento\Catalog\Model\Session $catalogSession,
....
    parent::__construct(
        $context,
        $layoutFactory,

이 특정 컨텍스트 개체의 작동 방식을 설명해 주시겠습니까?

답변:


30

다른 Context 객체가 있습니다.이 경우 \Magento\Framework\App\Action\Context이해하기 위해서는 "ActionContext"로 읽어야합니다. 작업이 실행되는 응용 프로그램 컨텍스트를 나타냅니다. 다시 말해, 컨트롤러 조치에 필요한 애플리케이션 상태 (예 : 레지스트리 또는 요청 오브젝트)가있는 모든 오브젝트에 액세스 할 수 있습니다.

컨텍스트 클래스에는 자체 기능이 없으며 다른 객체의 컨테이너 일뿐입니다. 각 제어기 조치에 20 개의 매개 변수가없는 바로 가기로 볼 수 있습니다. 모든 공통 매개 변수는 컨텍스트 오브젝트에 병합됩니다.


어떤 객체가 다른 객체에 포함되어 있는지 어떻게 알 수 $context있습니까?
LucScu

@LucaS는 소스 코드를 살펴 봅니다. 컨텍스트 생성자에 포함 된 클래스가 있습니다.
Fabian Schmengler

15

컨텍스트 객체가 도입되어 써드 파티 개발자가 추상 클래스 생성자의 변경 사항으로부터 분리되었습니다.

Magento 1에서 "도우미"동작이 많은 추상 클래스는 클래스 익스텐더를위한 편리한 API로 간주되었습니다. 추상 클래스의 방법과 암시 적 종속성이 발생하는 엄청난 수 ( AbstractModel, AbstractBlock, AbstractAction)

Magento 2에서는 상속 기반 API (보다 정확하게는 SPI)를 사용하지 않는 것이 좋지만 많은 레거시 API가 여전히 존재합니다. 처음에는 추상 클래스에서 추가 동작을 점차 제거 할 계획이었습니다. 그리고 생성자에서 일부 종속성을 제거 할 때 모든 익스텐더를 중단시키지 않기 위해 Context 객체를 도입했습니다.

현재 계획은 인터페이스 기반 API로 상속 기반 API를 포기하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.