Как создать собственный модуль в Magento 2
Опубликовано: 2018-03-19Что такое модуль Magento?
Как вы знаете, модуль — это каталог, содержащий блоки , контроллеры , модели , помощники и т. д., которые связаны с определенной бизнес-функцией.
В соответствии со стремлением Magento к оптимальной модульности модуль инкапсулирует одну функцию и имеет минимальные зависимости от других модулей.
Модули предоставляют бизнес-функции с поддерживающей логикой, в то время как темы сильно влияют на взаимодействие с пользователем и внешний вид витрины.
Назначение модуля
Целью каждого модуля является предоставление конкретных функций продукта путем реализации новых функций или расширения функций других модулей. Каждый модуль предназначен для независимой работы, поэтому включение или исключение определенного модуля обычно не влияет на функциональность других модулей.
В Magento 2 модули будут находиться в каталоге app/code установки Magento в следующем формате: app/code/<Vendor>/<ModuleName>. Теперь мы выполним эти шаги, чтобы создать простой модуль, который работает на Magento 2.
Создайте модуль Magento 2
- Создайте папку модуля.
- Создайте файл etc/module.xml.
- Создайте файл Registration.php.
- Запустите скрипт bin/magento setup:upgrade, чтобы установить новый модуль.
- Убедитесь, что модуль работает.
Давайте подробно рассмотрим каждый из этих шагов.
Шаг 1: Создайте папку модуля
- В Magento 2 есть два возможных места для модулей: папка приложения/кода и папка поставщика.
В зависимости от того, как был установлен Magento 2, основные модули могут находиться либо в папках vendor/magento/magento-* (для установки композитора), либо в папке app/code/Magento/ (для клонирования github).
- Какое из этих мест выбрать для нового модуля?
Если вы создаете модуль для конкретного проекта, лучше всего выбрать папку app/code и зафиксировать в репозитории проекта.
Если вы создаете расширение для повторного использования, лучше использовать композитор для его создания и поместить ваш модуль в папку vendor/<YOUR_VENDOR>/module-something.
Каждое имя модуля в Magento 2 состоит из двух частей — поставщика и самого модуля, поэтому вам необходимо определить имя поставщика и модуля. Для этого примера назовем поставщика «Обучение», а модуль «FirstUnit».
Создадим папку app/code/Learning и внутри этой папки поместим еще одну папку: FirstUnit. Если вы используете командную строку, код будет таким:
- cd в корневую папку
- приложение mkdir/код/обучение
- mkdirapp/код/Обучение/FirstUnit
Убедитесь, что у вас есть разрешение на создание файлов и папок в вашей установке.
Шаг 2: Создайте файл etc/module.xml
Этот файл необходим для существования модуля и содержит следующую информацию:
- Имя модуля
- Версия модуля
- Зависимости
Имя модуля определяется папками, которые мы только что создали, потому что в Magento 2 имена классов должны соответствовать структуре папок. Поскольку мы создали папки Learning/FirstUnit, имя нашего модуля будет Learning_FirstUnit, а все классы, принадлежащие этому модулю, будут начинаться с Learning\FirstUnit, например: Learning\FirstUnit\Observer\Test.
Версия модуля указывает текущую версию схемы и данных базы данных и используется при обновлении. Например, предположим, что вы решили изменить схему таблицы в своем модуле. Как вы можете быть уверены, что это изменение произойдет во всех экземплярах, где развернут код? Изменение базы данных прямыми SQL-запросами не сработает. Вместо этого в Magento 2 есть сценарии установки и обновления в каждом модуле (опционально). Эти сценарии содержат команды для изменения схемы базы данных или данных. Чтобы отслеживать, выполнять скрипт или нет, Magento 2 использует версии модулей. Каждый раз, когда вы вносите новое изменение в базу данных, вы внедряете новую версию модуля и изменяете соответствующий файл module.xml. Magento сохраняет текущую версию модуля в базе данных, и если значение базы данных и значение в module.xml не совпадают, он выполнит код обновления.
Зависимости. Если один модуль зависит от другого, в файле module.xml будет специальное объявление, определяющее список модулей, от которых зависит текущий модуль. В этом примере мы сделаем наш модуль зависимым от Magento_Catalog.
Используя следующий код командной строки, создайте папку app/code/Learning/FirstUnit/etc :
приложение mkdir/код/обучение/FirstUnit/и т. д.
Затем создайте файл XML со следующим содержимым:
<?xml версия="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Learning_FirstUnit" setup_version="0.0.1"> <последовательность> <module name="Magento_Catalog" /> </последовательность> </модуль> </config>
Обратите внимание, что в файле XML мы указали:
- Название модуля: Learning_FirstUnit (на основе созданных нами папок)
- Версия: 0.0.1 (начальная версия нашего модуля)
- Зависимость: Magento_Catalog. У нас может быть несколько зависимостей. В этом случае мы поместили бы узлы <module name=”..” /> под узлом последовательности.
Шаг 3: Создайте файл Registration.php
Каждый модуль должен иметь этот файл, который сообщает Magento, как найти модуль. Продолжая наш пример, создайте файл app/code/Learning/FirstUnit/registration.php . Затем поместите в него следующее содержимое:
<?php \Magento\Framework\Component\ComponentRegistrar::register(\Magento\Framework\Component\ComponentRegistrar::MODULE, 'Learning_FirstUnit', __DIR__);
Registration.php — это стандартизированный файл, который следует одному и тому же шаблону для всех модулей.
Единственное, что меняется, — это имя модуля, в нашем случае — Learning_FirstUnit
.
Шаг 4: Запустите команду «setup:upgrade».
Выполнение этой команды делает ваш новый модуль активным, уведомляя Magento о его присутствии.
Установка php bin/magento:обновление
Он должен отображать большой объем вывода, одна строка которого должна быть Learning_FirstUnit
. Убедитесь, что эта строка кода существует.
Шаг 5: Убедитесь, что новый модуль активен
Пока что мы не добавили в наш модуль никакого полезного кода — он по-прежнему пуст (а значит, невидим). Чтобы убедиться, что он был распознан, проверьте файл app/etc/config.php . Он имеет список автоматически сгенерированных модулей, которые активны.
Никогда не меняйте этот список вручную!
приложение для кошек /etc/env.php | grep Learning_FirstUnit
Используя эти шаги, вы сможете успешно создать новый модуль в Magento 2.
Читать далее:
Как развернуть статический контент в Magento 2