Коварная война россии против Украины. Ориентировочные потери врага
(по состоянию на 22.04.2024)
460260
солдат
348
самолетов
325
вертолетов
7236
танков
13904
ББМ
11736
артиллерия
768
ПВО
1046
РСЗО
15812
машин
26
корабли и катера
Как создать простой контроллер и действие в Magento 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 создайте папку Proverka, а в ней создайте файл Index.php с таким содержимым:

<?php
namespace Sebweo\Test\Controller\Proverka;
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}/testirovka/, вы должны создать папку 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="testirovka">
   <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}/testirovka/proverka/index/

 

Действие с именем index – это действие, которое Magento выполнит по умолчанию, если вы не укажете действие в URL. Т.е., наша ссылка может иметь и следующий вид:

{DOMEN}/testirovka/proverka/

 

Открыв обе эти ссылки, вы увидите текст Привет, мир!, т.е., результат выполнения действия в контроллере.

Если вам нужно другое действие (не index), например, View, вам нужно создать файл View.php в папке Proverka с таким содержимым:

<?php
namespace Sebweo\Test\Controller\Proverka;
class View extends \Magento\Framework\App\Action\Action
{
 public function execute()
 {
  echo 'Привет, мир (снова)!';
  exit();
 }
}

 

Если вы откроете URL:

{DOMEN}/testirovka/proverka/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. Примите наши поздравления!

До следующих уроков.

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *