Категории: Мадженто 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. Примите наши поздравления!

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

 

Share
Теги: Magento2

Последние посты

Сомерсет Моэм

Когда вы станете старше, вы поймете, что в мире можно хоть как-нибудь жить только при… Читать далее

27/03/2024

Михаил Грушевский

Все учатся своему родному языку, а наша беда такова, что нужно учить его больше, чем… Читать далее

26/03/2024

ТОП-5 надежных покерных обменников

Профессиональный покер – это многочисленные турниры и крупные суммы, что требует правильной настройки финансовых инструментов.… Читать далее

25/03/2024

Гай Юлий Цезарь

Все вокруг стремятся истребить врагов, но не объединиться с друзьями Гай Юлий Цезарь   Читать далее

24/03/2024

Как выбрать оптимальный смартфон для ребенка?

Сегодняшние дети сталкиваются с технологиями с самого раннего возраста, и смартфон уже давно перестал быть… Читать далее

22/03/2024

Выбираем электроскутер: важные критерии и характеристики

Лет 20 назад наблюдался пик популярности скутеров с двигателем внутреннего сгорания (ДВС). Маленькие, юркие, с… Читать далее

21/03/2024