|
86 | 86 | use ApiPlatform\Laravel\Eloquent\Metadata\ModelMetadata;
|
87 | 87 | use ApiPlatform\Laravel\Eloquent\Metadata\ResourceClassResolver as EloquentResourceClassResolver;
|
88 | 88 | use ApiPlatform\Laravel\Eloquent\PropertyAccess\PropertyAccessor as EloquentPropertyAccessor;
|
| 89 | +use ApiPlatform\Laravel\Eloquent\PropertyInfo\EloquentExtractor; |
| 90 | +use ApiPlatform\Laravel\Eloquent\Serializer\EloquentNameConverter; |
89 | 91 | use ApiPlatform\Laravel\Eloquent\Serializer\SerializerContextBuilder as EloquentSerializerContextBuilder;
|
90 | 92 | use ApiPlatform\Laravel\GraphQl\Controller\EntrypointController as GraphQlEntrypointController;
|
91 | 93 | use ApiPlatform\Laravel\GraphQl\Controller\GraphiQlController;
|
@@ -195,15 +197,16 @@ public function register(): void
|
195 | 197 | {
|
196 | 198 | $this->mergeConfigFrom(__DIR__.'/config/api-platform.php', 'api-platform');
|
197 | 199 |
|
198 |
| - $this->app->singleton(PropertyInfoExtractorInterface::class, function () { |
| 200 | + $this->app->singleton(PropertyInfoExtractorInterface::class, function (Application $app) { |
199 | 201 | $phpstanExtractor = class_exists(PhpDocParser::class) ? new PhpStanExtractor() : null;
|
200 | 202 | $reflectionExtractor = new ReflectionExtractor();
|
| 203 | + $eloquentExtractor = new EloquentExtractor($app->make(ModelMetadata::class)); |
201 | 204 |
|
202 | 205 | return new PropertyInfoExtractor(
|
203 | 206 | [$reflectionExtractor],
|
204 | 207 | $phpstanExtractor ? [$phpstanExtractor, $reflectionExtractor] : [$reflectionExtractor],
|
205 | 208 | [],
|
206 |
| - [$reflectionExtractor], |
| 209 | + [$eloquentExtractor], |
207 | 210 | [$reflectionExtractor]
|
208 | 211 | );
|
209 | 212 | });
|
@@ -262,10 +265,10 @@ public function register(): void
|
262 | 265 | return new CachePropertyMetadataFactory(
|
263 | 266 | new SchemaPropertyMetadataFactory(
|
264 | 267 | $app->make(ResourceClassResolverInterface::class),
|
265 |
| - new PropertyInfoPropertyMetadataFactory( |
266 |
| - $app->make(PropertyInfoExtractorInterface::class), |
267 |
| - new SerializerPropertyMetadataFactory( |
268 |
| - $app->make(SerializerClassMetadataFactory::class), |
| 268 | + new SerializerPropertyMetadataFactory( |
| 269 | + $app->make(SerializerClassMetadataFactory::class), |
| 270 | + new PropertyInfoPropertyMetadataFactory( |
| 271 | + $app->make(PropertyInfoExtractorInterface::class), |
269 | 272 | new AttributePropertyMetadataFactory(
|
270 | 273 | new EloquentAttributePropertyMetadataFactory(
|
271 | 274 | new EloquentPropertyMetadataFactory(
|
@@ -315,7 +318,7 @@ public function register(): void
|
315 | 318 | $config = $app['config'];
|
316 | 319 | $nameConverter = $config->get('api-platform.name_converter', SnakeCaseToCamelCaseNameConverter::class);
|
317 | 320 | if ($nameConverter && class_exists($nameConverter)) {
|
318 |
| - $nameConverter = $app->make($nameConverter); |
| 321 | + $nameConverter = new EloquentNameConverter($app->make($nameConverter)); |
319 | 322 | }
|
320 | 323 |
|
321 | 324 | $defaultContext = $config->get('api-platform.serializer', []);
|
@@ -400,9 +403,13 @@ public function register(): void
|
400 | 403 | });
|
401 | 404 | $this->app->bind(SerializerContextBuilderInterface::class, EloquentSerializerContextBuilder::class);
|
402 | 405 | $this->app->singleton(EloquentSerializerContextBuilder::class, function (Application $app) {
|
| 406 | + /** @var ConfigRepository */ |
| 407 | + $config = $app['config']; |
| 408 | + |
403 | 409 | return new EloquentSerializerContextBuilder(
|
404 | 410 | $app->make(SerializerContextBuilder::class),
|
405 |
| - $app->make(PropertyNameCollectionFactoryInterface::class) |
| 411 | + $app->make(PropertyNameCollectionFactoryInterface::class), |
| 412 | + $config->get('api-platform.name_converter', SnakeCaseToCamelCaseNameConverter::class) |
406 | 413 | );
|
407 | 414 | });
|
408 | 415 |
|
|
0 commit comments