В магенто 2 все модули теперь находятся в папке app/code, раньше, в магенто 1, было три вида папок core, local, community, теперь такого деления нет.
Попробуем создать всем известную надпись "Hello Word!", для этого мы создадим модуль, маршрут папок и непосредственно отобразим ее на нашем сайте.
Имена модулей как и в Magento 1 разделены на две части - "VendorName_ModuleName" ("НазваниеКомпании_ИмяМодуля"). например Magento_Product, Magento_Cms.
Давайте назовем наш модуль, например "First_Hello", лень много буковок писать, тогда структура папок нашего модуля будет такой:
app/code/First/Hello
Начальная структура папок готова. Теперь нам нужно создать файл module.xml в папке "app/code/First/Hello/etc" следующего содержания
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="First_Hello" setup_version="0.0.1"/>
</config>
В корне нашего модуля нужно создать файл registration.php
app/code/First/Hello/registration.php
Содержимое этого файла
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'First_Hello',
__DIR__
);
Наш пустой модуль готов.
Статусы модулей и их запуск
Давай проверим статус нашего модуля, для это в консоли надо запустить:
php bin/magento module:status
После выполнения этой команды вы увидите список всех установленных модулей, а во втором списке, будут модули которые еще не установлены, т.е. наш новый модуль:
List of disabled modules:
First_Hello
Это означает что наш модуль правильно настроен, но в данный момент он отключен. Чтобы его активировать, нужно выполнить команду:
php bin/magento module:enable First_Hello
После чего модуль станет активным. Еще можно его активировать просто прописав его в конфигурационный файл:
app/etc/config.php
В нем вы найдете список активных модулей, просто пропишите туда свой:
...
'First_Hello' => 1,
...
Если сейчас открыть сайт в браузере вы увидите ошибку:
There has been an error processing your request
А в логах сайта (var/reports/)
Please upgrade your database: Run "bin/magento setup:upgrade" from the Magento root directory.
Необходимо выполнить требуемую команду:
php bin/magento setup:upgrade
Теперь ваш пустой модуль окончательно установлен. Вы в этом сможете убедиться пройдя по этому пути:
Stores -> Configuration -> Advanced -> Advanced -> Disable Modules Output
Создание пути до модуля (URL адреса)
Для того чтобы вывести надпись "Hello Word!", надо проложить маршрут к нему, т.е. внешний url для нашего модуля.
Url в магенто разделен на три части route_id, controller и action:
http://site.ru/index.php/route_id/controller/action
Index.php необязательный параметр и зависит от настроек дружественных адресов (friendlys url's).
Для того чтобы создать путь к модулю (url), нам нужно создать файл routes.xml.
First/Hello/etc/frontend/routes.xml
Так как нам нужно, чтобы url работал во внешней части сайта, мы его положили в папку frontend, чтобы url работал в административной части, его надо положить в папку adminhtml. Создадим данный файл и назовем этот маршрут firsthello содержимое данного файла:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/App/etc/routes.xsd">
<router id="standard">
<route id="firsthello" frontName="firsthello">
<module name="First_Hello" />
</route>
</router>
</config>
Здесь мы составили первую часть URL
site.ru/firsthello/*
Дальше нам нужно определить контроллер и action для вывода нашего модуля. Если не указывать контроллер и action magento по умолчанию установит index.php, но путь его будет такой - First/Hello/Controller/Index/Index.php
Например мы хотим чтобы конечный url у нас бы такой "http://site.ru/firsthello/hello/world" для этого на нужно создать такой путь папок
First/Hello/Controller/Hello
Внутри папки Hello создадим файл World.php со следующим содержимым
<?php
namespace First\Hello\Controller\Hello;
class World extends \Magento\Framework\App\Action\Action
{
public function __construct(
\Magento\Framework\App\Action\Context $context)
{
return parent::__construct($context);
}
public function execute()
{
echo 'Hello World';
exit;
}
}
Теперь если открыть наш путь в браузере, вы должны увидеть надпись "Hello World!". Если путь или надпись у вас не открываются посмотрите в папке - var/generation нету ли тут вашего модуля, т.к. магенто генерирует часть элементов автоматически, поэтому может появиться у вас такой путь в этой папке - var/generation/First/Hello/Controller.