模組組態檔概觀
舊版Commerce中使用的config.xml
組態檔職責現在由位於不同模組目錄中的數個檔案分擔。 只有當模組請求特定設定型別時,Commerce才會視需要載入多個設定檔案。
您可以使用這些檔案(也稱為 組態型別)來自訂模組行為的特定方面。
多個模組可宣告會影響相同組態型別的組態檔案(例如事件),然後合併這些多個組態檔案。
以下是此主題中使用的常用辭彙:
-
組態物件 — 負責定義及驗證組態型別的Commerce程式庫或類別。 例如,
config.xml
的組態物件是Magento\Framework\App\Config。 -
組態階段 — 階段定義為 主要、全域 和 區域。 每個階段會決定何時載入組態型別並與相同名稱的組態型別合併。 例如,
module.xml
個檔案與其他module.xml
個檔案合併。 -
組態範圍 — 作為組態階段的補充,範圍定義了組態型別模型。 例如,
adminhtml
是在階段與其他模組adminhtml
設定一起載入的區域範圍。 如需詳細資訊,請參閱模組和區域。
設定載入和合併
本節討論如何載入及合併組態檔。
Commerce如何載入設定檔案
Commerce會依照以下順序載入設定檔(所有路徑都相對於Commerce安裝目錄):
- 主要組態(app/etc/di.xml)。 此檔案用於啟動Commerce。
- 來自模組(
<your component base dir>/<vendorname>/<component-type>-<component-name>/etc/*.xml
)的全域組態。 會從所有模組收集特定組態檔,並將它們合併在一起。 - 來自模組(
<your component base dir>/<vendorname>/<component-type>-<component-name>/etc/<area>/*.xml
)的區域特定組態。 從所有模組收集組態檔,並將其合併至全域組態。 某些區域特定設定可能會覆寫或擴充全域設定。
位置
-
<your component base dir>
是元件所在的基本目錄。 相對於Commerce安裝目錄,一般值為app/code
或vendor
。 -
<vendorname>
是元件的廠商名稱;例如,Commerce的廠商名稱為magento
。 -
<component-type>
為下列其中一項:module-
:擴充功能或模組。theme-
:主題。language-
:語言套件。
<magento_root>/app/design/frontend
或<magento_root>/app/design/adminhtml
下。<component-name>
: composer.json中定義的元件名稱。
設定檔合併
組態檔中的節點會根據其完整限定的XPath進行合併,XPath在$idAttributes
陣列中定義特殊屬性,宣告為其識別碼。 此識別碼對巢狀內嵌於相同父項節點下的所有節點而言必須是唯一的。
Commerce應用程式合併演演算法:
- 如果節點識別碼相等(或如果未定義識別碼),則會覆寫節點中的所有基礎內容(屬性、子節點和純量內容)。
- 如果節點識別碼不相等,則該節點是父節點的新子節點。
- 如果原始檔案有多個具有相同識別碼的節點,則會觸發錯誤,因為無法辨別識別碼。
合併組態檔案後,產生的檔案會包含原始檔案中的所有節點。
組態型別、物件和介面
以下各節提供有關配置型別、其對應的配置物件以及可用於處理物件的介面的資訊:
組態型別和物件
下表顯示每種設定型別及其相關的Commerce設定物件。
analytics.xml
communication.xml
queue_publisher.xml
設定介面
您可以使用Magento\架構\組態下的介面與組態檔互動。
如果您建立組態型別,就可以使用這些介面。
Magento\Framework\Config
提供下列介面:
- Framework\Config\ConverterInterface,它會將XML轉換成組態的記憶體陣列表示。
- Framework\Config\DataInterface,它會擷取指定範圍內的組態資料。
- Framework\Config\FileResolverInterface,可識別Magento\Framework\Config\ReaderInterface要讀取的檔案位置。
- Framework\Config\ReaderInterface,會從存放裝置讀取組態資料,並選取要讀取的存放裝置。
也就是說,檔案系統、資料庫和其他儲存體會根據合併規則合併組態檔,並使用驗證結構來驗證組態檔。
- Framework\Config\SchemaLocatorInterface,可找到XSD結構描述。
- Framework\Config\ScopeListInterface,傳回範圍清單。
- Framework\Config\ValidationStateInterface,它會擷取驗證狀態。