У попередньому уроці ми розглянули на практиці процес створення простого модуля на платформі Magento 2. Цей урок є його доповненням, і сьогодні ми розглянемо практичні моменти зі створення простого контролера і екшена (дії) в Magento 2.
Перейдіть в папку app/code і створіть в ній папку {VENDOR} – в нашому випадку це Sebweo, а в ній папку {MODULE} – в нашому випадку це Test. {VENDOR} – це «виробник» модуля; використовуйте назву своєї компанії. {MODULE} – це назва модуля.
Потім створіть папки Controller і etc в папці Test.
Простір імен:
Ваш модуль знаходиться в просторі імен Sebweo. Саме в цій папці ви будете “зберігати” модулі, які будете створювати. Використовуйте для своїх модулів свій власний простір імен.
ВАЖЛИВО: не редагуйте «основні» файли Magento 2, тобто в папці app/code/Magento (або в vendor/magento/), оскільки це може призвести до помилок при спробі оновлення платформи.
Тепер, коли ви створили основний «каркас» вашого модуля, ви повинні «оголосити» його в платформі 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.
В папці 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 це забороняють. Це можна використовувати тільки тимчасово, і тільки для тестових цілей.
Щоб отримати доступ до модуля через зовнішній інтерфейс (фронтенд), ви повинні створити маршрут для вашого модуля. Якщо вам потрібно отримати доступ до модуля по 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 – значення ноду frontNamecontroller – назва папки контролера (в нижньому регістрі)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. Прийміть наші вітання!
До наступних уроків.
Іспанська мова приваблює мільйони людей своєю мелодійністю, емоційністю та відносною простотою вивчення. Одним із найважливіших…
Коли проєкт залежить від чужих обмежень, зростають ризики простоїв, втрати доступу до даних і складнощів…
У тих, хто планує створення сайту вперше, майже завжди виникає питання: що таке домен і…
Для простого користувача критерієм хорошого Wi-Fi є швидке завантаження сторінок та відсутність буферизації під час…
Коли власник стоматологічної клініки вперше замислюється про автоматизацію, він нерідко іде найпростішим шляхом: гуглить "CRM…
Алоха! Останні кілька років остаточно закріпили тренд на віддалену роботу. Для веб-розробників, DevOps-інженерів та адміністраторів…