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. Прийміть наші вітання!

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

 

Share
Published by
SebWeo

Recent Posts

Як програмісту самовдосконалитись та змінити себе на краще

Зміни — це щось таке, що завжди лякає і рідко буває простим та легким. Тим…

3 дні ago

Як додати свій текстовий блок перед формою коментарів у WordPress

Блок коментування у сайтах на системі CMS WordPress можна віднести до одних із найважливіших частин…

5 днів ago

Я знайшов ідеальний подарунок для сестри на 8 березня: історія мого пошуку

Привіт, мене звати Олег, і я хочу поділитися з вами своєю історією про те, як…

6 днів ago

Стильні квадратні годинники для чоловіків на кожен день

Корпус у вигляді квадрата – це не лише данина класиці, а й сучасний акцент у…

7 днів ago

Білл Гейтс

Люди завжди переоцінюють зміни за тиждень, і недооцінюють можливі досягнення за рік Білл Гейтс  

1 тиждень ago

Як виключити певні сторінки з результатів пошуку WordPress

Однією із чудових особливостей платформи WordPress є внутрішній пошук. Проте, функція пошуку в CMS ВордПрес…

2 тижні ago