시나리오 : 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 모듈 개발자가 그들 만의 방식으로 접근해야하는 것이며, 그로 인한 혼란 / 비표준 구성 로딩은 비즈니스 비용 일 뿐입니 까?
공식 문서는 사용 가능한 클래스의 일부를 포함하는의 좋은 작업을 수행하지만 사실을 화해 아무것도 구체적인 구현 우리가 사용한다고 가정하고있는 명확한 지침이 없다, 또는 기대 인 경우 모든 모듈이을에 어떻게 결정의 개인적인.