시나리오 : Magento 2 모듈 개발자입니다. 에 구성 파일을 만들고 싶습니다 app/etc
. 이 파일을 영역별로 "범위 지정"하고 싶습니다.
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
Magento 1에서 나는 단지 a를 만들고 config.xml
내 길을 가고 있습니다. 영역 범위는 XML 파일 자체에서 발생했습니다. 그러나 Magento 2는 이와는 매우 다르게 접근합니다.
Magento 2에서 이러한 범위가 지정된 구성 파일을 읽기 위해 어떤 클래스 파일을 작성해야합니까? 이 작업을 수행하는 "올바른"방법이 Magento 2 소스에서 명확하지 않습니다. 핵심 코드는 여러 가지 접근 방식을 취하며 그 중 어느 것도 @api
메소드 로 표시되지 않습니다 . 이 공통 모듈 개발자 작업을 진행하는 방법을 알기가 어렵습니다. 보조 부작용으로, 또한 Magento 모듈 개발자가 핵심 구성 파일에서 읽는 방법을 알기가 어렵습니다 .
한편으로, "올바른"행동은 파일 시스템 리더 객체를 만드는 것입니다. 예를 들어 Magento import.xml
는 다음과 같이 파일 을로드하는 것 같습니다.
#File: vendor/magento/module-import-export/Model/Import/Config/Reader.php
namespace Magento\ImportExport\Model\Import\Config;
class Reader extends \Magento\Framework\Config\Reader\Filesystem
{
public function __construct(
//...
$fileName = 'import.xml',
//...
) {
parent::__construct(
$fileResolver,
$converter,
$schemaLocator,
$validationState,
$fileName,
$idAttributes,
$domDocumentClass,
$defaultScope
);
}
//...
}
기본 Magento\Framework\Config\Reader\Filesystem
클래스에는 영역 범위를 해결하는 코드가있는 것 같습니다.
그러나 일부 Magento 구성 파일은이 패턴을 피하는 것 같습니다. 이 파일에 대한 독자가 있지만 ( event.xml
이 예에서는)
vendor/magento/framework/Event/Config/Reader.php
이 리더 를 사용 하는 "범위 데이터"클래스도 있습니다 .
#File: vendor/magento/framework/Event/Config/Data.php
class Data extends \Magento\Framework\Config\Data\Scoped
{
public function __construct(
\Magento\Framework\Event\Config\Reader $reader,
//...
) {
parent::__construct($reader, $configScope, $cache, $cacheId);
}
}
이것은 범위 리더 클래스가 모듈 개발자가 만들어야하는 것처럼 보입니다. 그러나 모든 구성 파일에 이러한 범위 리더가있는 것은 아닙니다.
Magento 2 모듈 개발자가 따라야 할 명확한 경로가 있습니까? 아니면 이것은 단지 Magento 2 모듈 개발자가 그들 만의 방식으로 접근해야하는 것이며, 그로 인한 혼란 / 비표준 구성 로딩은 비즈니스 비용 일 뿐입니 까?
공식 문서는 사용 가능한 클래스의 일부를 포함하는의 좋은 작업을 수행하지만 사실을 화해 아무것도 구체적인 구현 우리가 사용한다고 가정하고있는 명확한 지침이 없다, 또는 기대 인 경우 모든 모듈이을에 어떻게 결정의 개인적인.