Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 626 lines (461 sloc) 19.026 kb
6b601bd @jfsimon [http-foudation] Better accept header parsing
jfsimon authored
1 UPGRADE FROM 2.1 to 2.2
2 =======================
3
64d43c8 @fabpot restricted to only URIs the first argument of the render tag
fabpot authored
4 ### TwigBridge
5
6 * The `render` tag signature and arguments changed.
7
8 Before:
9
10 ```
11 {% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': 'BlogBundle:Post:error' } %}
12 ```
13
14 After:
15
16 ```
76fefe3 @fabpot updated CHANGELOG and UPGRADE files
fabpot authored
17 {% render controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error' } %}
9718c76 @lyrixx Updated UPGRADE-2.2.md for twig bridge section
lyrixx authored
18 {# Or: #}
19 {{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error'}) }}
64d43c8 @fabpot restricted to only URIs the first argument of the render tag
fabpot authored
20 ```
21
9718c76 @lyrixx Updated UPGRADE-2.2.md for twig bridge section
lyrixx authored
22 Note: The function is the preferred way.
23
ded3a83 @jmikola [HttpFoundation] Document MongoDbSessionHandler changes
jmikola authored
24 ### HttpFoundation
25
26 * The MongoDbSessionHandler default field names and timestamp type have changed.
27
28 The `sess_` prefix was removed from default field names. The session ID is
29 now stored in the `_id` field by default. The session date is now stored as a
30 `MongoDate` instead of `MongoTimestamp`, which also makes it possible to use
31 TTL collections in MongoDB 2.2+ instead of relying on the `gc()` method.
32
bdf0334 @dlsniper Fixed the lap method. Added upgrade notes. Some CS fixes
dlsniper authored
33 * The Stopwatch functionality was moved from HttpKernel\Debug to its own component
34
0a380cf @fabpot [HttpFoundation] disabled Request _method feature by default (should now...
fabpot authored
35 * The _method request parameter support has been disabled by default (call
36 Request::enableHttpMethodParameterOverride() to enable it).
37
6b601bd @jfsimon [http-foudation] Better accept header parsing
jfsimon authored
38 #### Deprecations
39
40 * The `Request::splitHttpAcceptHeader()` is deprecated and will be removed in 2.3.
41
42 You should now use the `AcceptHeader` class which give you fluent methods to
43 parse request accept-* headers. Some examples:
44
45 ```
46 $accept = AcceptHeader::fromString($request->headers->get('Accept'));
47 if ($accept->has('text/html') {
48 $item = $accept->get('html');
49 $charset = $item->getAttribute('charset', 'utf-8');
50 $quality = $item->getQuality();
51 }
52
53 // accepts items are sorted by descending quality
54 $accepts = AcceptHeader::fromString($request->headers->get('Accept'))->all();
55
56 ```
97f6a1b @egeloen [Form] Update password type trimming to false
egeloen authored
57
58 ### Form
59
fb71964 @webmozart [Form] Added an alternative signature Form::add($name, $type, $options)
webmozart authored
60 * The PasswordType is now not trimmed by default.
61
bcc5552 @webmozart [Form] Protected methods in FormConfigBuilder and FormBuilder from being...
webmozart authored
62 * The class FormException is now an interface. The old class is still available
63 under the name Symfony\Component\Form\Exception\Exception, but will probably
64 be removed before 2.2. If you created FormException instances manually,
65 you are now advised to create any of the other exceptions in the
66 Symfony\Component\Form\Exception namespace or to create custom exception
67 classes for your purpose.
68
1e34e91 @webmozart [Form] Added upgrade instructions to the UPGRADE file
webmozart authored
69 * Translating validation errors is now optional. You can still do so
70 manually if you like, or you can simplify your templates to simply output
71 the already translated message.
72
73 Before:
74
75 ```
76 {{
77 error.messagePluralization is null
78 ? error.messageTemplate|trans(error.messageParameters, 'validators')
79 : error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
80 }}
81 ```
82
83 After:
84
85 ```
86 {{ error.message }}
87 ```
88
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
89 * FormType, ModelType and PropertyPathMapper now have constructors. If you
90 extended these classes, you should call the parent constructor now.
91 Note that you are not recommended to extend FormType nor ModelType. You should
92 extend AbstractType instead and use the Form component's own inheritance
93 mechanism (`AbstractType::getParent()`).
94
95 Before:
96
97 ```
98 use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper;
99
100 class CustomMapper extends PropertyPathMapper
101 {
102 public function __construct()
103 {
104 // ...
105 }
106
107 // ...
108 }
109 ```
110
111 After:
112
113 ```
114 use Symfony\Component\Form\Extensions\Core\DataMapper\PropertyPathMapper;
115
116 class CustomMapper extends PropertyPathMapper
117 {
118 public function __construct()
119 {
120 parent::__construct();
121
122 // ...
123 }
124
125 // ...
126 }
127 ```
128
fb71964 @webmozart [Form] Added an alternative signature Form::add($name, $type, $options)
webmozart authored
129 #### Deprecations
130
131 * The methods `getParent()`, `setParent()` and `hasParent()` in
132 `FormBuilderInterface` were deprecated and will be removed in Symfony 2.3.
133 You should not rely on these methods in your form type because the parent
134 of a form can change after building it.
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
135
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
136 * The class PropertyPath and related classes were deprecated and moved to a
137 dedicated component PropertyAccess. If you used any of these classes or
138 interfaces, you should adapt the namespaces now. During the move,
139 InvalidPropertyException was renamed to NoSuchPropertyException.
140
141 Before:
142
143 ```
144 use Symfony\Component\Form\Util\PropertyPath;
145 use Symfony\Component\Form\Util\PropertyPathBuilder;
146 use Symfony\Component\Form\Util\PropertyPathInterface;
147 use Symfony\Component\Form\Util\PropertyPathIterator;
148 use Symfony\Component\Form\Util\PropertyPathIteratorInterface;
149 use Symfony\Component\Form\Exception\InvalidPropertyException;
150 use Symfony\Component\Form\Exception\InvalidPropertyPathException;
151 use Symfony\Component\Form\Exception\PropertyAccessDeniedException;
152 ```
153
154 After:
155
156 ```
157 use Symfony\Component\PropertyAccess\PropertyPath;
158 use Symfony\Component\PropertyAccess\PropertyPathBuilder;
159 use Symfony\Component\PropertyAccess\PropertyPathInterface;
160 use Symfony\Component\PropertyAccess\PropertyPathIterator;
161 use Symfony\Component\PropertyAccess\PropertyPathIteratorInterface;
162 use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException;
163 use Symfony\Component\PropertyAccess\Exception\InvalidPropertyPathException;
164 use Symfony\Component\PropertyAccess\Exception\PropertyAccessDeniedException;
165 ```
166
167 Also, `FormUtil::singularify()` was split away into a class StringUtil
168 in the new component.
169
170 Before:
171
172 ```
173 use Symfony\Component\Form\Util\FormUtil;
174
175 $singular = FormUtil::singularify($plural);
176 ```
177
178 After:
179
180 ```
181 use Symfony\Component\PropertyAccess\StringUtil;
182
183 $singular = StringUtil::singularify($plural);
184 ```
185
186 The methods `getValue()` and `setValue()` were moved to a new class
187 PropertyAccessor.
188
189 Before:
190
191 ```
192 use Symfony\Component\Form\Util\PropertyPath;
193
194 $propertyPath = new PropertyPath('some.path');
195
196 $value = $propertyPath->getValue($object);
197 $propertyPath->setValue($object, 'new value');
198 ```
199
200 After (alternative 1):
201
202 ```
203 use Symfony\Component\PropertyAccess\PropertyAccess;
204
ac0c4ce @WouterJ Fixed typo in UPGRADE-2.2
WouterJ authored
205 $propertyAccessor = PropertyAccess::getPropertyAccessor();
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
206
207 $value = $propertyAccessor->getValue($object, 'some.path');
ac0c4ce @WouterJ Fixed typo in UPGRADE-2.2
WouterJ authored
208 $propertyAccessor->setValue($object, 'some.path', 'new value');
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
209 ```
210
211 After (alternative 2):
212
213 ```
214 use Symfony\Component\PropertyAccess\PropertyAccess;
215 use Symfony\Component\PropertyAccess\PropertyPath;
216
ac0c4ce @WouterJ Fixed typo in UPGRADE-2.2
WouterJ authored
217 $propertyAccessor = PropertyAccess::getPropertyAccessor();
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
218 $propertyPath = new PropertyPath('some.path');
219
220 $value = $propertyAccessor->getValue($object, $propertyPath);
ac0c4ce @WouterJ Fixed typo in UPGRADE-2.2
WouterJ authored
221 $propertyAccessor->setValue($object, $propertyPath, 'new value');
1bae7b2 @webmozart [PropertyAccess] Extracted PropertyAccess component out of Form
webmozart authored
222 ```
223
51223c0 @Tobion added upgrade instructions
Tobion authored
224 ### Routing
225
226 * RouteCollection does not behave like a tree structure anymore but as a flat
227 array of Routes. So when using PHP to build the RouteCollection, you must
228 make sure to add routes to the sub-collection before adding it to the parent
229 collection (this is not relevant when using YAML or XML for Route definitions).
230
231 Before:
232
233 ```
234 $rootCollection = new RouteCollection();
235 $subCollection = new RouteCollection();
236 $rootCollection->addCollection($subCollection);
237 $subCollection->add('foo', new Route('/foo'));
238 ```
239
240 After:
241
242 ```
243 $rootCollection = new RouteCollection();
244 $subCollection = new RouteCollection();
245 $subCollection->add('foo', new Route('/foo'));
246 $rootCollection->addCollection($subCollection);
247 ```
248
249 Also one must call `addCollection` from the bottom to the top hierarchy.
250 So the correct sequence is the following (and not the reverse):
251
252 ```
c9e8ee1 @kriswallsmith fixed typo
kriswallsmith authored
253 $childCollection->addCollection($grandchildCollection);
51223c0 @Tobion added upgrade instructions
Tobion authored
254 $rootCollection->addCollection($childCollection);
255 ```
256
257 * The methods `RouteCollection::getParent()` and `RouteCollection::getRoot()`
258 have been deprecated and will be removed in Symfony 2.3.
8c7a169 @Tobion [Routing] clean up of RouteCollection API
Tobion authored
259 * Misusing the `RouteCollection::addPrefix` method to add defaults, requirements
260 or options without adding a prefix is not supported anymore. So if you called `addPrefix`
261 with an empty prefix or `/` only (both have no relevance), like
262 `addPrefix('', $defaultsArray, $requirementsArray, $optionsArray)`
263 you need to use the new dedicated methods `addDefaults($defaultsArray)`,
264 `addRequirements($requirementsArray)` or `addOptions($optionsArray)` instead.
265 * The `$options` parameter to `RouteCollection::addPrefix()` has been deprecated
266 because adding options has nothing to do with adding a path prefix. If you want to add options
267 to all child routes of a RouteCollection, you can use `addOptions()`.
268 * The method `RouteCollection::getPrefix()` has been deprecated
269 because it suggested that all routes in the collection would have this prefix, which is
270 not necessarily true. On top of that, since there is no tree structure anymore, this method
271 is also useless.
272 * `RouteCollection::addCollection(RouteCollection $collection)` should now only be
273 used with a single parameter. The other params `$prefix`, `$default`, `$requirements` and `$options`
274 will still work, but have been deprecated. The `addPrefix` method should be used for this
275 use-case instead.
276 Before: `$parentCollection->addCollection($collection, '/prefix', array(...), array(...))`
277 After:
278 ```
279 $collection->addPrefix('/prefix', array(...), array(...));
280 $parentCollection->addCollection($collection);
281 ```
51223c0 @Tobion added upgrade instructions
Tobion authored
282
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
283 ### Validator
284
1db6f05 @ragtek Update UPGRADE-2.2.md
ragtek authored
285 * Interfaces were created for the classes `ConstraintViolation`,
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
286 `ConstraintViolationList`, `GlobalExecutionContext` and `ExecutionContext`.
287 If you type hinted against any of these classes, you are recommended to
288 type hint against their interfaces now.
289
290 Before:
291
292 ```
293 use Symfony\Component\Validator\ExecutionContext;
294
295 public function validateCustomLogic(ExecutionContext $context)
296 ```
297
298 After:
299
300 ```
fae3e35 @fabpot fixed typo
fabpot authored
301 use Symfony\Component\Validator\ExecutionContextInterface;
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
302
303 public function validateCustomLogic(ExecutionContextInterface $context)
304 ```
305
306 For all implementations of `ConstraintValidatorInterface`, this change is
307 mandatory for the `initialize` method:
308
309 Before:
310
311 ```
312 use Symfony\Component\Validator\ConstraintValidatorInterface;
313 use Symfony\Component\Validator\ExecutionContext;
314
315 class MyValidator implements ConstraintValidatorInterface
316 {
317 public function initialize(ExecutionContext $context)
318 {
319 // ...
320 }
321 }
322 ```
323
324 After:
325
326 ```
327 use Symfony\Component\Validator\ConstraintValidatorInterface;
328 use Symfony\Component\Validator\ExecutionContextInterface;
329
330 class MyValidator implements ConstraintValidatorInterface
331 {
332 public function initialize(ExecutionContextInterface $context)
333 {
334 // ...
335 }
336 }
337 ```
338
cc0df0a @webmozart [Validator] Changed validator to support pluralized messages by default
webmozart authored
339 * The sources of the pluralized messages in translation files have changed
340 from the singular to the pluralized version. If you created custom
341 translation files for validator errors, you should adapt them.
342
343 Before:
344
345 <trans-unit id="6">
346 <source>You must select at least {{ limit }} choices.</source>
347 <target>Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.</target>
348 </trans-unit>
349
350 After:
351
352 <trans-unit id="6">
353 <source>You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.</source>
354 <target>Sie müssen mindestens {{ limit }} Möglichkeit wählen.|Sie müssen mindestens {{ limit }} Möglichkeiten wählen.</target>
355 </trans-unit>
356
357 Check the file src/Symfony/Component/Validator/Resources/translations/validators.en.xlf
358 for the new message sources.
359
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
360 #### Deprecations
361
362 * The interface `ClassMetadataFactoryInterface` was deprecated and will be
363 removed in Symfony 2.3. You should implement `MetadataFactoryInterface`
364 instead, which changes the name of the method `getClassMetadata` to
365 `getMetadataFor` and accepts arbitrary values (e.g. class names, objects,
366 numbers etc.). In your implementation, you should throw a
367 `NoSuchMetadataException` if you don't support metadata for the given value.
368
369 Before:
370
371 ```
372 use Symfony\Component\Validator\Mapping\ClassMetadataFactoryInterface;
373
374 class MyMetadataFactory implements ClassMetadataFactoryInterface
375 {
376 public function getClassMetadata($class)
377 {
378 // ...
379 }
380 }
381 ```
382
383 After:
384
385 ```
386 use Symfony\Component\Validator\MetadataFactoryInterface;
387 use Symfony\Component\Validator\Exception\NoSuchMetadataException;
388
389 class MyMetadataFactory implements MetadataFactoryInterface
390 {
391 public function getMetadataFor($value)
392 {
393 if (is_object($value)) {
394 $value = get_class($value);
395 }
396
397 if (!is_string($value) || (!class_exists($value) && !interface_exists($value))) {
398 throw new NoSuchMetadataException(...);
399 }
400
401 // ...
402 }
403 }
404 ```
405
406 The return value of `ValidatorInterface::getMetadataFactory()` was also
407 changed to return `MetadataFactoryInterface`. Make sure to replace calls to
408 `getClassMetadata` by `getMetadataFor` on the return value of this method.
409
410 Before:
411
412 ```
413 $metadataFactory = $validator->getMetadataFactory();
414 $metadata = $metadataFactory->getClassMetadata('Vendor\MyClass');
415 ```
416
417 After:
418
419 ```
420 $metadataFactory = $validator->getMetadataFactory();
421 $metadata = $metadataFactory->getMetadataFor('Vendor\MyClass');
422 ```
423
424 * The class `GraphWalker` and the accessor `ExecutionContext::getGraphWalker()`
425 were deprecated and will be removed in Symfony 2.3. You should use the
426 methods `ExecutionContextInterface::validate()` and
427 `ExecutionContextInterface::validateValue()` instead.
428
429 Before:
430
431 ```
432 use Symfony\Component\Validator\ExecutionContext;
433
434 public function validateCustomLogic(ExecutionContext $context)
435 {
436 if (/* ... */) {
437 $path = $context->getPropertyPath();
438 $group = $context->getGroup();
439
440 if (!empty($path)) {
441 $path .= '.';
442 }
443
444 $context->getGraphWalker()->walkReference($someObject, $group, $path . 'myProperty', false);
445 }
446 }
447 ```
448
449 After:
450
451 ```
452 use Symfony\Component\Validator\ExecutionContextInterface;
453
454 public function validateCustomLogic(ExecutionContextInterface $context)
455 {
456 if (/* ... */) {
457 $context->validate($someObject, 'myProperty');
458 }
459 }
460 ```
461
c27cd09 @fabpot added missing method in the UPGRADE file for 2.2 (closes #8941)
fabpot authored
462 * The methods `ExecutionContext::addViolationAtSubPath()` and
463 `ExecutionContext::addViolationAtPath()` were deprecated and will be
464 removed in Symfony 2.3. You should use `addViolationAt()` instead.
24c6530 @webmozart [Validator] Added instructions on integrating the latest Validator chang...
webmozart authored
465
466 Before:
467
468 ```
469 use Symfony\Component\Validator\ExecutionContext;
470
471 public function validateCustomLogic(ExecutionContext $context)
472 {
473 if (/* ... */) {
474 $context->addViolationAtSubPath('myProperty', 'This value is invalid');
475 }
476 }
477 ```
478
479 After:
480
481 ```
482 use Symfony\Component\Validator\ExecutionContextInterface;
483
484 public function validateCustomLogic(ExecutionContextInterface $context)
485 {
486 if (/* ... */) {
487 $context->addViolationAt('myProperty', 'This value is invalid');
488 }
489 }
490 ```
491
492 * The methods `ExecutionContext::getCurrentClass()`, `ExecutionContext::getCurrentProperty()`
493 and `ExecutionContext::getCurrentValue()` were deprecated and will be removed
494 in Symfony 2.3. Use the methods `getClassName()`, `getPropertyName()` and
495 `getValue()` instead.
496
497 Before:
498
499 ```
500 use Symfony\Component\Validator\ExecutionContext;
501
502 public function validateCustomLogic(ExecutionContext $context)
503 {
504 $class = $context->getCurrentClass();
505 $property = $context->getCurrentProperty();
506 $value = $context->getCurrentValue();
507
508 // ...
509 }
510 ```
511
512 After:
513
514 ```
515 use Symfony\Component\Validator\ExecutionContextInterface;
516
517 public function validateCustomLogic(ExecutionContextInterface $context)
518 {
519 $class = $context->getClassName();
520 $property = $context->getPropertyName();
521 $value = $context->getValue();
522
523 // ...
524 }
525 ```
9071676 @ricardclau create oneof constraint and add deprecation messages in choice, also mak...
ricardclau authored
526
4d40b11 @benja-M-1 Add notes about kernel.trusted_proxies parameter
benja-M-1 authored
527 ### FrameworkBundle
528
3341c8e @fabpot [FrameworkBundle] restricted to only URIs the first argument of the acti...
fabpot authored
529 * The `render` method of the `actions` templating helper signature and arguments changed:
530
531 Before:
532
533 ```
534 <?php echo $view['actions']->render('BlogBundle:Post:list', array('limit' => 2), array('alt' => 'BlogBundle:Post:error')) ?>
535 ```
536
537 After:
538
539 ```
540 <?php echo $view['actions']->render($view['router']->generate('post_list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?>
541 ```
542
76fefe3 @fabpot updated CHANGELOG and UPGRADE files
fabpot authored
543 where `post_list` is the route name for the `BlogBundle:Post:list`
544 controller, or if you don't want to create a route:
545
546 ```
547 <?php echo $view['actions']->render(new ControllerReference('BlogBundle:Post:list', array('limit' => 2)), array('alt' => 'BlogBundle:Post:error')) ?>
548 ```
3341c8e @fabpot [FrameworkBundle] restricted to only URIs the first argument of the acti...
fabpot authored
549
4d40b11 @benja-M-1 Add notes about kernel.trusted_proxies parameter
benja-M-1 authored
550 #### Configuration
551
b7e4cff @fabpot tweaked previous merge
fabpot authored
552 * The 2.2 version introduces a new parameter `trusted_proxies` that replaces
553 `trust_proxy_headers` in the framework configuration.
4d40b11 @benja-M-1 Add notes about kernel.trusted_proxies parameter
benja-M-1 authored
554
555 Before:
556
557 ```
558 # app/config/config.yml
559 framework:
560 trust_proxy_headers: false
561 ```
562
563 After:
564
565 ```
566 # app/config/config.yml
567 framework:
b7e4cff @fabpot tweaked previous merge
fabpot authored
568 trusted_proxies: ['127.0.0.1', '10.0.0.1'] # a list of proxy IPs you trust
4d40b11 @benja-M-1 Add notes about kernel.trusted_proxies parameter
benja-M-1 authored
569 ```
b6bdb45 @beberlei Completly refactor the Serializer Options Pull Request to push context i...
beberlei authored
570
35b62ac @hhamon [Security] renamed Constraint namespace to Constraints for validator cla...
hhamon authored
571 ### Security
572
573 * The existing ``UserPassword`` validator constraint class has been modified.
574 Its namespace has been changed to better fit the Symfony coding conventions.
575
576 Before:
577
578 ```
579 use Symfony\Component\Security\Core\Validator\Constraint\UserPassword;
580 ```
581
582 After: (note the `s` at the end of `Constraint`)
583
584 ```
585 use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
586 ```
587
588 * The new ``UserPassword`` validator constraint class now accepts a new
589 ``service`` option that allows to specify a custom validator service name in
590 order to validate the current logged-in user's password.
591
592 ```
593 use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
594
595 $constraint = new UserPassword(array(
596 'service' => 'my.custom.validator.user_password',
597 ));
598 ```
599
600 #### Deprecations
601
602 * The two previous ``UserPassword`` and ``UserPasswordValidator`` classes in
603 the ``Symfony\Component\Security\Core\Validator\Constraint`` namespace have
604 been deprecated and will be removed in 2.3.
605
606 Before:
607
608 ```
609 use Symfony\Component\Security\Core\Validator\Constraint\UserPassword;
610 use Symfony\Component\Security\Core\Validator\Constraint\UserPasswordValidator;
611 ```
612
613 After:
614
615 ```
616 use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
617 use Symfony\Component\Security\Core\Validator\Constraints\UserPasswordValidator;
618 ```
619
6923a48 @fabpot fixed markup
fabpot authored
620 ### Serializer
b6bdb45 @beberlei Completly refactor the Serializer Options Pull Request to push context i...
beberlei authored
621
6923a48 @fabpot fixed markup
fabpot authored
622 * All serializer interfaces (Serializer, Normalizer, Encoder) have been
623 extended with an optional `$context` array. This was necessary to allow for
624 more complex use-cases that require context information during the
625 (de)normalization and en-/decoding steps.
Something went wrong with that request. Please try again.