Categories: Мадженто 2

Как создать простой контроллер и действие в 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. Примите наши поздравления!

До следующих уроков.

Tags: Magento2

Recent Posts

Правильный выбор качественных игральных карт

Известно, что первые игральные карты были изобретены династией Тан в Китае еще в 9 веке.… Read More

15/11/2020

Как найти новую работу – лучшие тактики

Давно прошли те времена, когда люди получали работу сразу же после окончания учебы, и оставались… Read More

13/11/2020

Лицензирование Zoom в Украине – тарифы и цены

Самоизоляция 2020 года поставила людей в достаточно суровые условия – несмотря на вынужденные карантинные меры,… Read More

10/11/2020

Десятка самых хоккейных городов Украины

Есть ли в Украине хоккей? Многие поклонники этого вида спорта ассоциируют игру с шайбой на… Read More

09/11/2020

Достоинства б/у ноутбуков и критерии выбора техники

Современный рынок компьютерной техники постоянно обновляется, ежегодно предлагая пользователям новые и более мощные модели ПК… Read More

03/11/2020

Самые красивые водопады мира (часть 1)

Водопад – это одно из самых волнующих и красивых творений матушки-природы в мире. По всему… Read More

31/10/2020