В предыдущем уроке мы рассмотрели на практике процесс создания простого модуля на платформе Magento 2. Этот урок является его дополнением, и сегодня мы рассмотрим практические моменты по созданию простого контроллера и экшена (действия) в Magento 2.
Перейдите в папку app/code и создайте в ней папку {VENDOR} – в нашем случае это Sebweo, а в ней папку {MODULE} – в нашем случае это Test. {VENDOR} – это «производитель» модуля; используйте название своей компании. {MODULE} – это название модуля.
Затем создайте папки Controller и etc в папке Test.
Пространство имен:
Ваш модуль находится в пространстве имен Sebweo. Именно в этой папке вы будете «хранить» модули, которые будете создавать. Используйте для своих модулей свое собственное пространство имен.
ВАЖНО: не редактируйте «основные» файлы Magento 2, то есть в папке app/code/Magento (или в vendor/magento/), поскольку это может привести к ошибкам при попытке обновления платформы.
Теперь, когда вы создали основной «каркас» вашего модуля, вы должны «объявить» его в платформе Magento 2. Для этого создайте файл module.xml в папке 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="Sebweo_Test" setup_version="1.0.0"> <sequence> <module name="Magento_Catalog"/> </sequence> </module> </config>
Также нам нужно создать файл регистрации модуля. Перейдите в app/code/Sebweo/Test и создайте файл registration.php с таким содержимым:
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Sebweo_Test', __DIR__ );
После этого запустите следующую команду в консоли (видео-инструкция по консоли для Мадженто 2 здесь):
php bin/magento setup:upgrade
Эта команда добавит строку
'Sebweo_Test' => 1
в файл app/etc/config.php. Данная строка означает, что ваш модуль активен. Для неактивных модулей значение 0.
В папке app/code/Sebweo/Test/Controller создайте папку Proverka, а в ней создайте файл Index.php с таким содержимым:
<?php
namespace Sebweo\Test\Controller\Proverka;
class Index extends \Magento\Framework\App\Action\Action
{
public function execute()
{
echo 'Привет, мир!';
exit();
}
}
Здесь мы создали класс Index, который на самом деле является действием (экшеном, action) в Magento 2. По сравнению с 1-й версией Мадженто, в Magento 2 больше нет папки controllers (с контроллерами). Теперь вам нужно создавать файлы для действий. Эти действия расширяют базовый класс \Magento\Framework\App\Action\Action и должны иметь функцию (метод) execute(). В Magento 1.x вы группировали действия в одном контроллере, в 2.х вам нужно группировать классы действий в этой папке.
ВАЖНО: не используйте конструкторы echo и особенно exit в PHP-файлах. Стандарты кода Magento 2 это запрещают. Это можно использовать только временно, и только для тестовых целей.
Чтобы получить доступ к модулю через внешний интерфейс (фронтенд), вы должны создать маршрут для вашего модуля. Если вам нужно получить доступ к модулю по URL {DOMEN}/testirovka/, вы должны создать папку frontend в папке etc, а затем разместить в ней файл routes.xml с таким содержимым:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd"> <router id="standard"> <route id="sebweo_test" frontName="testirovka"> <module name="Sebweo_Test" /> </route> </router> </config>
Мы используем «стандартный» (standard) маршрутизатор, который обеспечивает доступ к внешней части нашего модуля. Кроме этого еще есть маршрутизаторы: robots, urlrewrite, cms и default. В качестве идентификатора маршрутизатора (route id) нужно использовать уникальное значение, это может быть, например, {vendor_module}. Значение в ноде frontName используется в URL для доступа к контроллеру во внешнем интерфейсе, т.е., является частью ссылки.
Некоторые замечания по организации контроллеров
Путь к контроллеру по URL имеет следующий вид:
{DOMEN}/path/controller/index/
где:
path – значение нода frontNamecontroller – название папки контролера (в нижнем регистре)index – название файла действия контролера (экшена) (в нижнем регистре)
В нашем примере ссылка будет иметь следующий вид:
{DOMEN}/testirovka/proverka/index/
Действие с именем index – это действие, которое Magento выполнит по умолчанию, если вы не укажете действие в URL. Т.е., наша ссылка может иметь и следующий вид:
{DOMEN}/testirovka/proverka/
Открыв обе эти ссылки, вы увидите текст Привет, мир!, т.е., результат выполнения действия в контроллере.
Если вам нужно другое действие (не index), например, View, вам нужно создать файл View.php в папке Proverka с таким содержимым:
<?php
namespace Sebweo\Test\Controller\Proverka;
class View extends \Magento\Framework\App\Action\Action
{
public function execute()
{
echo 'Привет, мир (снова)!';
exit();
}
}
Если вы откроете URL:
{DOMEN}/testirovka/proverka/view
Вы увидите текст Привет, мир (снова)!.
Если это не работает, в первую очередь попробуйте очистить кэш или отключить его в админке Система > Управление кешем.
Включите отображение сообщений об ошибках:
local.xml.sample в local.xml в папке pub/errors/app/bootstrap.php две строчки:error_reporting(E_ALL);
ini_set('display_errors', 1);
Ошибка: «Не указана установочная версия для модуля Sebweo_Test» (Setup version for module ‘Sebweo_Test’ is not specified)
Решение: отсутствует файл registration.php в вашем модуле
Ошибка: «Пожалуйста, обновите вашу базу данных: Запустите команду «bin/magento setup:upgrade» из корневого каталога Magento (Please upgrade your database: Run «bin/magento setup:upgrade» from the Magento root directory)
Решение: выполните следующую команду из консоли:
php bin/magento setup:upgrade
И запустите перекомпиляцию:
php bin/magento setup:di:compile
Компиляция не активна в режиме разработчика (developer mode), и ее не нужно запускать, когда вы находитесь в производственном режиме (production mode).
Чтобы включить режим разработчика (чтобы не выполнять перекомпиляцию при каждой модификации), выполните следующую команду в консоли:
php bin/magento deploy:mode:set developer
Вот и все! Вы успешно создали первый контроллер (маршрутизатор) на Magento 2. Примите наши поздравления!
До следующих уроков.
20 мая 2026 года официально состоялся релиз долгожданной мажорной версии WordPress 7.0 «Armstrong», названной в…
Каждый владелец сайта и SEO-специалист ведет ежедневную упорную борьбу за удержание пользователя на страницах вебресурса.…
Многие предприниматели сталкиваются с одной и той же проблемой. После утверждения бюджета разработка затягивается, появляются…
Футбольная секция быстро показывает, насколько обувь подходит ребенку. Если пара скользит, давит или плохо цепляется…
Компания Samsung — один из лидеров на рынке электроники. Ее смартфоны выделяются надежностью, качественными дисплеями,…
Испанский язык привлекает миллионы людей своей мелодичностью, эмоциональностью и относительной простотой изучения. Одним из важнейших…