シナリオ:私は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モジュールの開発者が独自の方法でアプローチするべきものであり、結果として生じるカオス/非標準構成ロードはビジネスを行うためのコストにすぎませんか?
公式ドキュメントは、利用可能なクラスの一部をカバーするのは良い仕事をしていませんが、実際に調和させるものは何も使用する具体的な実装我々はしているとし上の明確なガイダンスはありません、または期待がある場合、すべてのモジュールがその上でこれを行う方法を決定します自分の。