docs(articles): From Magento to Symfony, a requalification guide grouped into sections
uk/articles/magento-to-symfony/practice/plan.md
новий файл +60
−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, міграції, перезапуск воркерів.