Приклад модуля для Magento 2 другимъ манеромъ

Восени минулого року, коли вийшла Magento 2.0, я написав статтю "Приклад модуля для Magento 2", в якій змалював один з можливих варіантів формування оточення для розробки модуля під другу версію Magento. Зовсім недавно вийшли оновлення (v 2.0.1 і v 2.0.2), судячи з яким розробники Magento йдуть від схеми розгортання з використанням Magento Composer Installer (за допомогою якого розгортається Magento 1 і розгорталася в моєму попередньому прикладі Magento 2.0.0), принаймні, проста зміна версії Magento c 2.0.0 на 2.0.1 призводило до того, що те, що розгорталося, працювати як Magento-додаток абсолютно не хотіло.

Під катом — новий приклад розгортання оточення, адаптований під умови, що змінилися.

Завдання оточення
Приклад містить сценарії, надають можливість:

  1. Розгортати середу локально для розробки Magento2-модуля;
  2. Розгортати середу на сервісі Travis CI для тестування Magento2-модуля;
Короткий вміст
Опис основних каталогів і файлів flancer32/sample_mage2_module:

  • /deploy/: файли, що використовуються при розгортанні;
    • /composer_opts.json: опції для додавання в оригінальний composer.json Magento2 CE;
    • /composer_unset.json: список ключів оригінального composer.json для видалення;
    • /merge_json.php: утиліта злиття основного JSON-файлу Magento2 CE і додаткових опцій;
  • /dev/fw/FuncTestApp.php: імплементація Magento2-програми для запуску функціональних тестів;
  • /src/: исходники самого Magento-модуля;
  • /test/: тести Magento-модуля;
    • /functional/: функціональні тести модуля (з підключенням до БД);
    • /unit/: unit-тести модуля (все оточення mock'ируется');
  • /work/: каталог розгортання середовища для розробки і тестування Magento-модуля;
  • /.travis.yml: сценарій тестування для Travis CI;
  • /composer.json: composer.json для розроблюваного модуля;
  • /deploy.sh: сценарій розгортання;
  • /deploy_cfg.sh.init: шаблон для задання конфігураційних параметрів локальної розгортки;
  • /deploy_cfg.sh.travis: конфігураційні параметри для розгортання на Travis CI;
Загальний алгоритм розгортання
  • За допомогою composer'а створюємо Magento2 CE проект;
  • Доповнюємо
    composer.json
    CE проекту потрібними нам інструкціями;
  • За допомогою composer'а оновлюємо проект;
  • Запускаємо інсталятор самої Magento для ініціалізації бази даних;
  • Виставляємо права на каталоги і файли;
Конфігурація
При розгортанні конфігурація зчитується з файлу
./deploy_cfg.sh
(не знаходиться під контролем версій зі зрозумілих причин). Шаблон для створення конфігураційного локального файлу містить параметри двох типів:

  • настройки magento-інсталятора, запускающегося з командного рядка
    deploy.sh
    ;
  • права на файлову систему Magento-додатки (власник і група);
Додаткові опції composer.json
У додаткових опціях до оригінального Magento2 CE додатком додаються:

  • безпосередньо сам розроблюваний модуль;
  • інструкція
    autoload-dev
    для використання імплементації Magento2-програми для запуску функціональних тестів;
  • зниження мінімальної стабільності composer-пакетів з
    alpha
    dev
    ;
Злиття JSON-конфігурацій
В даному прикладі зчитування JSON-конфігурації і подальша обробка ведеться через універсальний контейнер даних (DataObject), що, за великим рахунком, зайво (див.
./deploy/merge_json.php
). Тим не менш, я використав цей компонент, щоб перевірити можливість підключення при розгортанні додаткових залежностей, що використовуються виключно при розгортанні. Вообщем, це можна викинути, якщо заважає. Крім правок у
merge_json.php
також потрібно викинути з
./deploy.sh
рядка

echo "\nAdd initial dependencies to M2 CE project..."
composer require flancer32/php_data_object:dev-master

Перед злиттям видаляється елемент
minimum-stability
в оригінальному
composer.json
Magento2 CE (див. файл
deploy/composer_unset.json
), тому що в противному випадку він буде містити масив [ 'alpha', 'dev' ] замість одиничного значення 'dev'.

Ініціалізація програми
Magento2-інсталятор просто запускається
deploy.sh
:

php $M2_ROOT/bin/magento setup:install ...

Доступні для ініціалізації параметры.

Тестування модуля
$ cd work/vendor
$ php ./bin/phpunit -c flancer32/sample_mage2_module/test/unit/phpunit.dist.xml
$ php ./bin/phpunit -c flancer32/sample_mage2_module/test/functional/phpunit.dist.xml

Лог Travis'а.

Доповнення

Version Control

Розробка модуля відбувається не у каталозі
./src
, а в каталозі
./work/виробника/flancer32/sample_mage2_module/src
. Для того, щоб IDE распознавало всі модулі, що знаходяться в розробці, потрібно їх перерахувати до відповідних настройках (для PhpStorm це File / Settings / Version Control).

Secret key for Magento Connect

Для створення composer-проекту

$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition $M2_ROOT

потрібно створити пару "ключів" на сайті Magento Connect. У разі розгортання вручну з командного рядка composer зберігає ці параметри в локальних налаштуваннях, у разі розгортання на Travis CI потрібно задавати ці параметри змінних оточення $M2_KEY_PUB & $M2_KEY_PRIV або прямо вказати в
.travis.yml
:

- composer config -g http-basic.repo.magento.com PUBLIC PRIVATE

Error: Maximum function nesting level of '100' reached

При виникненні даної помилки потрібно додати в
php.ini
:

xdebug.max_nesting_level=200

Phing

Phing нічого не пропонує для складання Magento-проектів (та він і не повинен, в общем-то). Тому ось так — shell & composer.

"Другимъ манеромъ"

Словосполучення взято з якийсь дуже старої куховарської книги, яка коли-то мені попалася на очі.

Відскік від відповідальності
Даний матеріал є лише прикладом і не може служити основою для розгортання реальних додатків без його осмислення.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.