docs(articles): Magento and Symfony examples side by side, request lifecycle as a Mermaid diagram
uk/articles/magento-to-symfony/core/di.md
+24
−4
24
24
25
25
## preference → alias
26
26
27
+
::::columns
28
+
:::col
27
29
**Magento** · etc/di.xml
28
30
29
31
```xml
31
33
for="Vendor\Shipping\Api\RateProviderInterface"
32
34
type="Vendor\Shipping\Model\DhlRateProvider"/>
33
35
```
34
−
36
+
:::
37
+
:::col
35
38
**Symfony** · атрибут на реалізації
36
39
37
40
```php
42
45
{
43
46
}
44
47
```
48
+
:::
49
+
::::
45
50
або в services.yaml:
46
51
```yaml
47
52
# ...
53
58
54
59
## virtualType і аргументи → іменовані сервіси
55
60
61
+
::::columns
62
+
:::col
56
63
**Magento** · окремий лог-файл через virtualType
57
64
58
65
```xml
77
84
</arguments>
78
85
</type>
79
86
```
80
−
87
+
:::
88
+
:::col
81
89
**Symfony** · канал Monolog + автовайринг за іменем
82
90
83
91
```yaml
99
107
) {}
100
108
}
101
109
```
110
+
:::
111
+
::::
102
112
103
113
Назва аргументу `$faqLogger` вибирає канал `faq`. Так само працюють scoped HTTP-клієнти (`HttpClientInterface $erpClient`), пули кешу та lock-фабрики. Загальний випадок, коли треба передати конкретні значення:
104
114
124
134
125
135
## Plugin → декоратор
126
136
137
+
::::columns
138
+
:::col
127
139
**Magento** · after-плагін
128
140
129
141
```xml
145
157
}
146
158
}
147
159
```
148
−
160
+
:::
161
+
:::col
149
162
**Symfony** · декоратор сервісу
150
163
151
164
```php
167
180
}
168
181
}
169
182
```
183
+
:::
184
+
::::
170
185
171
186
Усі, хто просить `PriceCalculatorInterface`, отримають декоратор, а він викликає оригінал. Відмінності від плагінів:
172
187
185
200
186
201
## Масиви в di.xml → теги
187
202
203
+
::::columns
204
+
:::col
188
205
**Magento** · пул реалізацій
189
206
190
207
```xml
197
214
</arguments>
198
215
</type>
199
216
```
200
−
217
+
:::
218
+
:::col
201
219
**Symfony** · тег + локатор
202
220
203
221
```php
223
241
}
224
242
}
225
243
```
244
+
:::
245
+
::::
226
246
227
247
Новий формат — це лише новий клас, що реалізує інтерфейс. `#[AutowireIterator]` дає ітератор усіх реалізацій (з пріоритетами), `#[AutowireLocator]` — ліниву мапу за ключем.
228
248