У попередньому уроці ми розглянули на практиці процес створення простого модуля на платформі 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
– значення ноду 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. Прийміть наші вітання!
До наступних уроків.
Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…
Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…
Вибір ідеального хостингу під свій сайт може бути досить заплутаною справою, особливо коли існує багато…
Щоб уникати помилок, потрібно набиратися досвіду; щоб набиратися досвіду, потрібно робити помилки Лоуренс Пітер
Коротке визначення Чорного SEO Чорне СЕО (або Чорна оптимізація) — це будь-яка практика, метою якої…
Отримання прав водія категорії C відкриває двері до професійної діяльності, пов'язаної з керуванням вантажними автомобілями.…