场景:我是Magento 2模块开发人员。我想在中创建配置文件app/etc
。我希望此文件按区域“范围”
app/etc/my_file.xml
app/etc/frontend/my_file.xml
app/etc/adminhtml/my_file.xml
在Magento 1中,我只创建一个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模块开发人员应该以自己的方式采取的措施,而由此造成的混乱/非标准配置-负载只是做生意的成本?
在官方文件确实涵盖了一些可用类的好工作,但没有什么调和的事实有哪个具体实现我们假设在使用没有明确的指导,或者如果期望是每一个模块决定如何做到这一点在其拥有。