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

Опалення і гаряча вода коли треба, а не коли включать

Тепло в домі і гаряча вода в будь-який час для багатьох мешканців багатоквартирних та приватних… Read More

19/09/2020

Що краще: цифрове телебачення Т2 чи інтернет-телебачення

Сучасне життя неможливо уявити без телебачення. Воно дозволяє дізнаватися про події в Україні та світі,… Read More

02/09/2020

Гіпоалергенна подушка. Чому вона важлива?

Зараз знайдеться мало людей, в яких немає алергії на продукти або пилок рослин. Вважається, що… Read More

28/08/2020

Футбольний Інстаграм – що нового у топових футболістів

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

24/08/2020

Види та типи компресійних панчіх

Вироби називають компресійними, коли їх застосовують для лікування, а також профілактики порушень кровотоку в нижніх… Read More

22/08/2020

Як правильно замінити оливу у двотактному гідроциклі?

Гідроцикли – це класний плавзасіб, який може подарувати вам незліченні години приємного проведення часу на… Read More

19/08/2020