План на три тижні

← План на три тижні

Ashterix

docs(articles): SEO titles, intros and a section preview image for From Magento to Symfony

uk/articles/magento-to-symfony/practice/plan.md +4 −0

План на три тижні

Найшвидший шлях — переписати знайомий Magento-модуль на Symfony. Наскрізна вправа нижче: FAQ з категоріями, JSON API для читання й редагування, імпортом і нічним прибиранням. Кожна частина модуля має свою пару в Symfony.

Частина Vendor_Faq Що написати в Symfony
db_schema.xml: faq_question, faq_category Entity\Question, Entity\Category, міграція
Model, ResourceModel, Collection, Api/* QuestionRepository з 3–4 методами
webapi.xml + Api/*Interface FaqController: GET /api/faq, GET /api/faq/{slug} + групи серіалізації
adminhtml: збереження й видалення POST, PUT, DELETE з DTO через #[MapRequestPayload] і Validator
acl.xml Firewall, ролі, Voter
Імпорт CSV через чергу Команда app:faq:import + Messenger
crontab.xml: прибирання #[AsCronTask]
system.xml: faq/general/enabled %env(bool:FAQ_ENABLED)%
Integration tests WebTestCase + KernelTestCase + Foundry

Тиждень 1. Фундамент: запит, DI, контролери

  • Книга «Symfony: The Fast Track», розділи до Doctrine.
  • Документація: Routing, Controller, Service Container.
  • Схема життя запиту і всі debug:* команди.

Вправа: новий проєкт (symfony new або symfony/skeleton), ендпоінти GET /api/faq і GET /api/faq/{slug} на захардкоджених даних, декоратор і тегований пул сервісів.

Тиждень 2. Дані, форми, доступ

  • Doctrine: сутності, зв'язки, Unit of Work, QueryBuilder, міграції.
  • Validator, DTO на вході, Security.
  • Профайлер: знайти й виправити N+1.

Вправа: сутності, міграції, фікстури, ендпоінти запису з DTO і валідацією, доменні винятки, які слухач kernel.exception перетворює на HTTP-відповіді з потрібним статусом.

Тиждень 3. Асинхронність, API, тести, prod

  • Messenger, Scheduler, Cache, Serializer.
  • KernelTestCase, WebTestCase, Foundry.
  • Деплой: prod-середовище, воркери.

Вправа: імпорт CSV через чергу, нічне прибирання, кеш з тегами, функціональні тести API, збірка в prod.

Чекліст

Шістнадцять речей, які варто зробити руками, а не лише прочитати.

  • Створив проєкт (symfony new або composer create-project symfony/skeleton) і запустив його локально.
  • Можу пояснити, що відбувається між index.php і контролером: події kernel.*.
  • Знаходжу сервіси через debug:autowiring і debug:container.
  • Замінив реалізацію інтерфейсу через alias або #[AsAlias].
  • Написав декоратор там, де в Magento був би плагін.
  • Зібрав набір реалізацій через тег і #[AutowireIterator].
  • Створив сутність зі зв'язком ManyToOne і згенерував міграцію.
  • Можу пояснити, чому flush() записує всі зміни, а не одну сутність.
  • Знайшов N+1 у профайлері й прибрав його fetch join.
  • Додав ендпоінт з DTO на вході через #[MapRequestPayload] і перевірив відповідь 422 на невалідних даних.
  • Закрив /admin роллю і написав Voter.
  • Перетворив доменний виняток на HTTP-відповідь слухачем kernel.exception.
  • Виніс важку роботу в Messenger і запустив воркер.
  • Налаштував періодичну задачу в Scheduler.
  • Написав WebTestCase і KernelTestCase з даними з Foundry.
  • Зібрав prod: composer dump-env prod, cache:clear, міграції, перезапуск воркерів.