Зміна мислення

Зміна мислення

Magento — готовий продукт, який ви розширюєте, не торкаючись ядра. Тому там стільки механізмів втручання: плагіни на будь-який публічний метод, preference, layout XML, EAV, адмін-конфіг зі скоупами.

Symfony — набір компонентів, з яких ви збираєте власний застосунок. Ядра як продукту немає: код у src/ і є застосунок, ви ним володієте і просто змінюєте його. Тому механізмів втручання значно менше, а поведінка явніша: що ви бачите в конструкторі й конфігурації, те й працює.

Головна думка

Більшість магентівських «як мені перехопити X» у Symfony перетворюються на «просто змініть свій код». Перехоплення потрібне лише для коду з vendor/, і для нього є три інструменти: подія, декоратор, перевизначення сервісу.

Переноситься майже без змін

  • Впровадження залежностей через конструктор, програмування на інтерфейсах. Magento вас цьому навчила, Symfony це винагороджує.
  • Composer, PSR-4, Psr\Log\LoggerInterface і Monolog — ті самі.
  • bin/magento побудований на Symfony Console. Клас команди виглядає майже однаково.
  • Мислення подіями та спостерігачами.
  • Черги повідомлень, ретраї, окремі воркери.
  • PHPUnit, PHPStan, PHP-CS-Fixer.

Треба відучитися

  • ObjectManager і згенерований код: Factory, Proxy, Interceptor у generated/.
  • getData()/setData(), DataObject і магічні геттери.
  • Плагіни на будь-який метод будь-якого класу.
  • XML на все. У Symfony більшість конфігурації — PHP-атрибути поруч із кодом, решта — YAML.
  • Інтерфейс у Api/Data для кожної сутності. Service contracts тут не обов'язкові.
  • EAV, скоупи store/website, адмін-налаштування, індексатори, режими. Їх немає, і будувати їх без реальної потреби не варто.