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 створіть папку Perevirka, а в ній створіть файл Index.php з таким вмістом:

<?php
namespace Sebweo\Test\Controller\Perevirka;
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}/testuvannya/, ви повинні створити папку 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="testuvannya">
   <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}/testuvannya/perevirka/index/

 

Дія з ім’ям index – це дія, яку Magento виконає за замовчуванням, якщо ви не вкажете дію в URL. Тобто, наше посилання може мати й такий вигляд:

{DOMEN}/testuvannya/perevirka/

 

Відкривши обидва ці посилання, ви побачите текст Вітаю, світ!, тобто, результат виконання дії в контролері.

Якщо вам потрібна інша дія (не index), наприклад, View, вам потрібно створити файл View.php в папці Perevirka з таким вмістом:

<?php
namespace Sebweo\Test\Controller\Perevirka;
class View extends \Magento\Framework\App\Action\Action
{
 public function execute()
 {
  echo 'Вітаю, світ (знову)!';
  exit();
 }
}

 

Якщо ви відкриєте URL:

{DOMEN}/testuvannya/perevirka/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. Прийміть наші вітання!

До наступних уроків.

 

Recent Posts

Огляд WordPress 7.0 “Armstrong”: Нова ера ШІ та масштабна перебудова Core-архітектури

20 травня 2026 року офіційно відбувся реліз довгоочікуваної мажорної версії WordPress 7.0 «Armstrong», названої на…

1 тиждень ago

History Hijacking: Чому Google карає за «зламану» кнопку Назад і як захистити сайт за допомогою CSP

Кожен власник сайту та SEO-спеціаліст веде щоденну запеклу боротьбу за утримання користувача на сторінках вебресурсу.…

2 тижні ago

Як вибрати дитячі бутси для футбольної секції та не помилитися з типом підошви

Футбольна секція швидко показує, наскільки взуття підходить дитині. Якщо пара ковзає, тисне або погано чіпляється…

2 тижні ago

Флагманський смартфон: чому варто купити Samsung Galaxy S26 Ultra

Компанія Samsung - один із лідерів на ринку електроніки. Її смартфони вирізняються надійністю, якісними дисплеями,…

2 тижні ago

Дієслово dar в іспанській мові: значення, відмінювання та особливості використання

Іспанська мова приваблює мільйони людей своєю мелодійністю, емоційністю та відносною простотою вивчення. Одним із найважливіших…

3 тижні ago

Ідеальне робоче місце: збираємо надійний сетап для стабільної роботи та геймінгу

Робочий простір давно перестав бути просто столом із ПК/ноутбуком. Сьогодні це повноцінна екосистема, де кожна…

3 тижні ago