You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use Symfony\Component\PropertyAccess\PropertyAccess;
65
69
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
66
70
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -89,6 +93,8 @@ var_dump($article, $articles);
89
93
90
94
The first call produces an `Article` instance with a populated `CommentCollection`; the second call returns an `ArticleCollection` containing `Article` objects.
91
95
96
+
Test coverage: `tests/JsonMapper/DocsQuickStartTest.php`.
97
+
92
98
### PHP classes
93
99
In order to guarantee a seamless mapping of a JSON response into PHP classes you should prepare your classes well.
94
100
Annotate all properties with the requested type.
@@ -170,7 +176,7 @@ To use the `PhpDocExtractor` extractor you need to install the `phpdocumentor/re
170
176
require __DIR__ . '/vendor/autoload.php';
171
177
172
178
use MagicSunday\JsonMapper\Converter\CamelCasePropertyNameConverter;
173
-
use MagicSunday\JsonMapper\JsonMapper;
179
+
use MagicSunday\JsonMapper;
174
180
use Symfony\Component\PropertyAccess\PropertyAccess;
175
181
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
176
182
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -219,7 +225,7 @@ You may alternatively implement `\MagicSunday\JsonMapper\Value\TypeHandlerInterf
219
225
require __DIR__ . '/vendor/autoload.php';
220
226
221
227
use DateTimeImmutable;
222
-
use MagicSunday\JsonMapper\JsonMapper;
228
+
use MagicSunday\JsonMapper;
223
229
use MagicSunday\JsonMapper\Value\ClosureTypeHandler;
224
230
use stdClass;
225
231
use Symfony\Component\PropertyAccess\PropertyAccess;
@@ -294,7 +300,7 @@ and optional the name of a collection class to the method.
294
300
require __DIR__ . '/vendor/autoload.php';
295
301
296
302
use ArrayObject;
297
-
use MagicSunday\JsonMapper\JsonMapper;
303
+
use MagicSunday\JsonMapper;
298
304
use Symfony\Component\PropertyAccess\PropertyAccess;
299
305
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
300
306
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -333,7 +339,7 @@ A complete set-up may look like this:
333
339
require __DIR__ . '/vendor/autoload.php';
334
340
335
341
use MagicSunday\JsonMapper\Converter\CamelCasePropertyNameConverter;
336
-
use MagicSunday\JsonMapper\JsonMapper;
342
+
use MagicSunday\JsonMapper;
337
343
use Symfony\Component\PropertyAccess\PropertyAccess;
338
344
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
339
345
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -372,7 +378,7 @@ Use `JsonMapper::addCustomClassMapEntry()` when the target class depends on runt
372
378
```php
373
379
require __DIR__ . '/vendor/autoload.php';
374
380
375
-
use MagicSunday\JsonMapper\JsonMapper;
381
+
use MagicSunday\JsonMapper;
376
382
use Symfony\Component\PropertyAccess\PropertyAccess;
377
383
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
378
384
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -413,7 +419,7 @@ The mapper operates in a lenient mode by default. Switch to strict mapping when
413
419
require __DIR__ . '/vendor/autoload.php';
414
420
415
421
use MagicSunday\JsonMapper\Configuration\JsonMapperConfiguration;
416
-
use MagicSunday\JsonMapper\JsonMapper;
422
+
use MagicSunday\JsonMapper;
417
423
use Symfony\Component\PropertyAccess\PropertyAccess;
418
424
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
419
425
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
@@ -453,7 +459,7 @@ Type resolution is the most expensive part of a mapping run. Provide a PSR-6 cac
453
459
```php
454
460
require __DIR__ . '/vendor/autoload.php';
455
461
456
-
use MagicSunday\JsonMapper\JsonMapper;
462
+
use MagicSunday\JsonMapper;
457
463
use Symfony\Component\Cache\Adapter\ArrayAdapter;
458
464
use Symfony\Component\PropertyAccess\PropertyAccess;
459
465
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
$converter = new CamelCasePropertyNameConverter();
44
-
// or $converter = new UpperSnakeCaseConverter();
42
+
$converter = new UpperSnakeCaseConverter();
45
43
46
44
$mapper = new JsonMapper($propertyInfo, $propertyAccessor, $converter);
47
45
```
48
46
49
47
Name converters are stateless and should be declared `final`. They are applied to every property access during mapping, so keep the implementation idempotent and efficient.
48
+
49
+
Test coverage: `tests/JsonMapper/DocsCustomNameConverterTest.php`.
The mapper validates enum values. When strict mode is enabled (`JsonMapperConfiguration::strict()`), an invalid enum value results in a `TypeMismatchException`.
57
+
58
+
The mapper validates enum values. In strict mode (`JsonMapperConfiguration::strict()`), an invalid enum value results in a `TypeMismatchException` instead of populating the property.
59
+
60
+
Test coverage: `tests/JsonMapperTest.php::mapBackedEnumFromString` and `tests/JsonMapper/JsonMapperErrorHandlingTest.php::itReportsInvalidEnumValuesInLenientMode`.
0 commit comments