Magento 2에서 어떤 유형의 클래스가 생성됩니까?


9

Magento 2에는 자동으로 생성되고 저장된 클래스 세트가 var/generation있으며 코어 코드에서 사용됩니다.
핵심 모듈 중 하나를 복제하여 사용자 정의 모듈을 만들려고 할 때 모듈에도 생성 된 클래스가 있음을 알았습니다.
생성 된 클래스에서 프록시, 인터셉터, 공장을 보았습니다 ....

자동 생성되는 클래스 또는 클래스 유형의 전체 목록이 있습니까?
그리고 부수적 인 질문으로 ... 언제 / 어디서 생성됩니까?

답변:


9

다른 엔티티를 생성하는 데는 여러 가지 이유가 있습니다.

프록시 -게으른 로딩에 사용됩니다. 그러나 각 유형에는 별도의 프록시 클래스가 필요하므로 개발자가 수동으로 작성하는 것이 성가 시므로 Magento가 생성합니다. di.xml에서 프록시에 대한 참조 만 찾을 수 있습니다.

팩토리 -비 주사 가능 항목 (엔티티)을 만드는 데 사용되는 클래스입니다. 프록시와 동일합니다. PHP에는 아직 제네릭이 없으므로 개발자가 상용구 코드를 작성하지 않도록 팩토리를 자동 생성합니다. Magento 코드에서 팩토리와 상호 작용합니다. 아마도 당신은 당신의 엔티티에 대한 자신의 공장이 필요할 것입니다. 생성자에서 해당 팩토리를 요청하면 다음 실행 또는 컴파일러 실행 중에 생성됩니다.

인터셉터 -인터 셉션 구성 요소에서 사용되는 인프라 클래스입니다. Flyingmana와 Phil Winkle은 어쨌든 그들과 상호 작용해서는 안된다는 것을 알았습니다.

오브젝트 그래프 프로파일 링 모드의 로거와 같이 생성 된 다른 엔티티가 많이 있지만이 3 가지가 가장 중요합니다.

마 젠토 2도 컴파일 할 수 있습니다. 컴파일 하면 DI 및 인터셉트가 더 빨라집니다. 모든 코드 생성 및 컴파일은 dev / tools / Magento / Tools / Di / compiler.php로 수행 할 수 있습니다


2

개념에서 :

당신은 클래스를 만지거나 사용할 필요가 없기 때문에 자동 생성되는 클래스의 종류를 알 필요가 없습니다.

그들은 즉시 생성되지만 (나중에?) 나중에 cli 명령 또는 이와 유사한 것을 통해 생성되어야합니다.

내부 부품이 새로운 유형을 필요로 할 때 존재하는 유형 목록은 언제든지 증가 할 수 있습니다. 그러나 이들에 대한 액세스는 항상 일반적인 문서화 된 API (일반적으로 함수 호출) 뒤에 숨겨져 있습니다.


1
"또는 사용"에 대해 잘 모르겠습니다. 예를 들면 다음과 같습니다 Magento\Cms\Block\Block. 생성자에서 인스턴스 \Magento\Cms\Model\BlockFactory가 사용됩니다. 그 클래스는 코드의 어디에도 없습니다. 에서 만 찾을 수 있습니다 var/generation. 따라서 비슷한 모듈을 사용하는 경우 비슷한 클래스를 사용해야 할 수도 있습니다.
Marius

2

이것이 Magento가 새로운 플랫폼에 대한 측면 지향적 접근 방식을 생성하는 방법입니다. 동적으로 이벤트를 전달하는 대신 이전, 주변 및 이후 "이벤트"를 실제로 생성합니다. 이는 프로그래머에게 편의성과 플랫폼 성능의 균형을 유지합니다.

자동 의존성 주입과 같은 일부 기법은 리플렉션을 통해 실행되는 것이 아니라 생성 된 클래스로 병합됩니다.


"왜?"를 설명해 주셔서 감사합니다. 그러나 나의 주요 질문은 "무엇입니까?" "어디?"
Marius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.