Как создать простой контроллер и действие в Magento 2
В предыдущем уроке мы рассмотрели на практике процесс создания простого модуля на платформе Magento 2. Этот урок является его дополнением, и сегодня мы рассмотрим практические моменты по созданию простого контроллера и экшена (действия) в Magento 2.
Шаг №1: Создание модуля
Перейдите в папку app/code и создайте в ней папку {VENDOR}
– в нашем случае это Sebweo, а в ней папку {MODULE}
– в нашем случае это Test. {VENDOR}
– это «производитель» модуля; используйте название своей компании. {MODULE}
– это название модуля.
Затем создайте папки Controller
и etc
в папке Test.
Пространство имен:
Ваш модуль находится в пространстве имен Sebweo
. Именно в этой папке вы будете «хранить» модули, которые будете создавать. Используйте для своих модулей свое собственное пространство имен.
ВАЖНО: не редактируйте «основные» файлы Magento 2, то есть в папке app/code/Magento
(или в vendor/magento/
), поскольку это может привести к ошибкам при попытке обновления платформы.
Шаг №2: Объявление нового модуля в Magento 2
Теперь, когда вы создали основной «каркас» вашего модуля, вы должны «объявить» его в платформе 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
.
Шаг №3: Создание контроллера
В папке 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 это запрещают. Это можно использовать только временно, и только для тестовых целей.
Шаг №4: Создание маршрута для доступа к контроллеру
Чтобы получить доступ к модулю через внешний интерфейс (фронтенд), вы должны создать маршрут для вашего модуля. Если вам нужно получить доступ к модулю по 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
– значение нодаfrontName
controller
– название папки контролера (в нижнем регистре)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. Примите наши поздравления!
До следующих уроков.
Последние посты
Как купить автомобиль на аукционе?
Если вас интересует вопрос, можно ли купить автомобиль на аукционе, вот вам краткий ответ: да.… Читать далее
Основные критерии при выборе и покупке телевизора
В данном обзоре мы собрали основные советы и критерии по приобретению телевизора, в одном месте,… Читать далее
На что обратить внимание при выборе фонарика на батарейках
Фонарик на батарейках способен помочь в разных ситуациях, начиная от походов и заканчивая авариями. При… Читать далее
Всесторонний обзор Apple Watch Series 9: в чем его отличия от других поколений
Последняя презентация американской компании продемонстрировала несколько разнообразных новинок. В частности, в середине сентября 2023 года… Читать далее
Как утеплить ребенка на зиму с помощью меховых наушников
Голова и уши – это те части тела, которые больше всего нуждаются в тепле зимой.… Читать далее
Как проходит осмотр у проктолога при различных заболеваниях и как к нему подготовиться?
Проктология специализируется на лечении различных заболеваний ануса и прямой кишки. Такие деликатные проблемы вызывают боли… Читать далее