Categories: Мадженто 2

Описание модульной системы в Magento 2

Система на Magento 2 состоит из нескольких типов компонентов: темы, модули, библиотеки, языковые пакеты. А фреймворк Magento 2 предлагает разработчикам готовый набор базовой логики, библиотек и PHP-кода, которые наследуются всеми компонентами системы.

Модули и темы Magento 2 используются в качестве элементов для кастомизации: модули предоставляют бизнес-логику, а темы предоставляют функции для настройки внешнего вида сайта. Модули могут зависеть друг от друга, а могут быть достаточно независимыми, чтобы обеспечивать максимальную гибкость настройки сайта.

 

 

Модульная система в Magento 2

Каждый модуль представляет собой логическую группу, которая состоит из Блоков, Помощников, Контроллеров, Моделей. Эта группа независима и предназначена для того, чтобы не влиять на другой функционал. Таким образом, при использовании модульного подхода, каждый модуль предоставляет свои собственные функции с минимальными зависимостями от других модулей, чтобы включение/отключение модуля не влияло на функциональность других модулей.

 

Модули Magento 2 размещаются в папке vendor/magento (при установке через composer) или в app/code/Magento (при ручной установке). Например, модуль Customer можно найти в одном из этих мест: app/code/Magento/Customer или vendor/magento/module-customer. В этих папках содержится весь код и конфигурация, которые связаны с модулем.

 

 

Название модуля и его декларация

Имя каждого модуля определяется в файле module.xml, который находится в app/code/<Vendor>/<ModuleName>/etc/. Вы должны именовать модуль в соответствии со следующей схемой Namespace_Module: где Namespace – это имя поставщика модуля (разработчика), а Module – это имя модуля.

 

Минимальная информация, которая необходима для объявления модуля:

  • Полное название модуля
  • Зависимости модуля (при их наличии)

 

Пример минимального кода для декларации модуля:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
 <module name="Namespace_Module" setup_version="2.0.0">
 </module>
</config>

 

 

Зависимости модуля

Концепция зависимостей играет очень важную роль в Magento 2: все модули собраны в логические группы с уникальными отдельными функциями. В таких условиях несколько модулей не могут отвечать за одну и ту же функцию. В то же время один модуль не может отвечать за различные функции в Magento 2. Для этого нужно объявлять все зависимости. Отключение и/или удаление модуля не приводит к отключению и/или удаление других модулей. Модули могут зависеть от таких компонентов, как другие модули, PHP расширения и библиотеки.

 

Задачи зависимостей модуля

Вы можете управлять зависимостями модуля с помощью 3-х шагов:

  • Прежде всего, вы должны дать имя модулю и объявить его
  • Затем вы должны объявить все зависимости
  • При желании вы также можете определить желаемый порядок загрузки

 

Декларация зависимостей

Все зависимости перечислены в файле composer.json каждого модуля. Ниже пример использования:

app/code/Magento/Catalog/composer.json
{
"name": "magento/module-catalog",
"description": "N/A",
"require": {
 "php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
 "magento/module-store": "100.2.*",
 "magento/module-eav": "101.0.*",
 "magento/module-cms": "102.0.*",
 "magento/module-indexer": "100.2.*",
 …
},
…
}

 

 

Порядок загрузки зависимостей

Чтобы объявить порядок загрузки любых зависимостей, вы должны использовать элемент <sequence> в файле module.xml.

Нод <sequence> является необязательным элементом, поэтому он используется только в тех случаях, когда необходим определенный порядок загрузки модулей.

Основной синтаксис:

<sequence>
 <module name="Vendor_Module"/>
</sequence>

 

 

Пример использования

Файл: vendor/magento/module-customer/etc/module.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
 <module name="Magento_Customer" setup_version="2.0.12">
  <sequence>
   <module name="Magento_Eav"/>
   <module name="Magento_Directory"/>
  </sequence>
 </module>
</config>

 

 

Элемент <sequence> файла module.xml используется только для определения порядка загрузки зависимостей. Вы должны использовать файл composer.json, чтобы сделать фактические объявления зависимостей.

 

 

Обзор внедрения зависимостей

Внедрение зависимостей означает, что все зависимости передаются в объект, а не извлекаются из среды этим объектом.

Зависимость (или связь) подразумевает степень того, как один компонент полагается на некоторый другой компонент для выполнения своей функции. Чем больше степень зависимости компонента, тем меньше его переносимость в новые проекты.

Диспетчер объектов показывает среду зависимостей для внедрения в конструктор. Он должен использоваться только при написании кода.

 

Типы зависимостей модуля

В Magento есть два типа зависимостей модулей: жесткие и мягкие зависимости.

  1. Модуль с жесткой зависимостью не может выполнять любые функции без других модулей, от которых он зависит.
  2. Модуль с мягкой зависимостью может работать без других модулей, от которых он зависит.

 

Следует помнить, что в случае, когда один модуль использует код из другого, он обязательно должен явно объявить зависимость.

Последовательность установки: сначала устанавливается модуль, который служит зависимостью для другого модуля, а затем – модуль, который полагается на него.

 

 

Модули и области действия

Модули определяют не только ресурсы, которые видны и доступны в области, но также и поведение области.

Magento состоит из следующих областей:

  • adminhtml – отвечает за Панель администрирования Magento 2
  • frontend – отвечает за внешний интерфейс (Storefront)
  • webapi_rest – веб-API REST
  • webapi_soap – SOAP Web API
  • doc

 

Каждая область со всеми конкретными ресурсами объявляет себя в определенном модуле. Можно включить и отключить область в модуле. С включенным модулем вы вводите маршрутизаторы области в процесс маршрутизации общего применения. При отключенном модуле маршрутизаторы области не загружаются, поэтому ресурсы и специальные функции области недоступны.

Имейте в виду, что модуль не должен зависеть от другой области модуля.

Magento использует области для эффективного вызова веб-служб – загружает зависимый код для этой области. Каждая область имеет свое собственное поведение и вид компонентов, которые работают отдельно.

 

 

Соглашение о расположении модулей

Существуют специальные стандарты и соглашения в Magento 2, которые относятся к расположению модулей в файловой системе.

 

Правила расположения модулей

Вот как выглядит стандартная локализация для конкретных объектов:

Объект Расположение
База кода пользовательского модуля app/code/<Vendor>/<Module>
Файлы темы app/design/<ОБЛАСТЬ>/<Module>/<theme>
Файлы библиотек lib/<Vendor_Library>

 

 

Share
Published by
SebWeo
Tags: Magento2

Recent Posts

Что делать начинающему программисту на старте карьеры?

После завершения начального курса по программированию вы, как начинающий программист, имеете несколько путей для дальнейшего…

1 день ago

Что поможет сделать ваш сайт более веб-доступным?

Основная цель создания сайта – это поделиться своим контентом со всем миром. Вы хотите, чтобы…

4 дня ago

Фитолампа для зелени на балконе: Ваш секрет для здорового урожая круглый год

Фитолампа для выращивания зелени на балконе: Оптимальные условия для урожая Фитолампа для выращивания зелени на…

5 дней ago

Ключевые моменты собеседования с клиентом по разработке/дизайну сайта

Собеседование – это ценное умение, которое может помочь узнать больше о человеке, какой-либо теме или…

6 дней ago

Печать книги Львов: как быстро и выгодно напечатать книгу от 1 экземпляра

В мире, где индивидуальность имеет значение, возможность напечатать книгу во Львове даже в единственном экземпляре…

1 неделя ago

Экстернат 10–11 класс Украина: современное решение для быстрого и удобного обучения

Сегодня все больше учеников и родителей ищут альтернативу традиционной школе, выбирая более гибкие, индивидуальные и…

2 недели ago