2016-01-15 4 views
-1

Я начал внедрять новый модуль в Magento2, и с тех пор у меня появилось больше вопросов, чем ответов.Magento2: Разработка пользовательских модулей и DI

Я успешно создал свой собственный модуль и, похоже, работает, но не совсем. Я использую свои собственные контроллеры и хочу реализовать свой собственный макет, с некоторыми внешними (не локальными) файлами JS/CSS.

Что я в первую очередь застрял с , добавив некоторые внешние JS/CSS на страницу. Мне казалось, что это не так просто, как я думал. Я читал много статей о том, как это можно сделать, но никто из них не работал для меня. Я не хочу изменять какую-либо тему, я просто хочу использовать свою собственную страницу (, возможно, без тематики).

Кроме того, я создал еще одну акцию (же, как работа HelloWorld пример) в моем модуле app/code/MyModule/Product/Controller/Api/Index.php, который проходит правильный класс и т.д. и т.п., но опять же - не работает. То, что я получал рядом ошибка:

Recoverable Error: Argument 1 passed to ...\Api\AbstractApiAction::__construct() must be an instance of Magento\Framework\App\Action\Context, instance of Magento\Framework\ObjectManager\ObjectManager given, called in vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php on line 97 and defined in app/code/.../Api/AbstractApiAction.php on line 24

Каково было мое удивление, когда я обнаружил, что он не будет работать, если я не перекомпилировать DI контейнер с bin/magento setup:di:compile. Я думаю, что не стоит говорить, что этот процесс занимает немного времени. И когда я создаю новое действие, я должен пойти и сделать setup:di:compile, чтобы иметь возможность развиваться дальше.

Я полностью отключил кеширование в области администратора.


Теперь я хочу, чтобы очистить несколько вопросов:

  1. Как я могу добавить внешние JS/CSS файлы на пользовательской странице (заказного контроллера).
  2. Есть ли способ развития чего-л. без постоянной перекомпиляции контейнера DI? Или я чего-то не хватает?
  3. В соответствии с вопросом выше, что на самом деле Developer mode означает в Magento2, я помню, что он отключает кеширование и т. Д., Но кодовая база не автогенерируется или я пропускаю что-л. еще раз?

ответ

3

Что касается компиляции, вам не нужно запускать эту команду в режиме разработчика. Если каталог var/di magento будет читать конфигурацию, но вы можете безопасно удалить его, и он будет работать нормально, только немного медленнее, так как все настройки должны читаться из файлов. Ошибка, которую вы видели, объясняется тем, что magento генерирует классы перехватчиков, чтобы использовать плагины. Эти классы создаются в var/generation и содержат информацию о конструкторе для автозагрузчика. Когда вы измените свой конструктор для класса, который был сгенерирован в предыдущем запросе, он сломается. Если вы увидите такую ​​ошибку в будущем, просто удалите var/cache, var/generation и var/di (если существует) и обновите страницу.

Смежные вопросы