Skip to content

Commit 8bebffd

Browse files
authored
Merge pull request #597 from api-platform/param_converter
Move data retrieving and deserialization to kernel.request listeners
2 parents 9ab3d8d + 3b3f10d commit 8bebffd

27 files changed

+468
-453
lines changed

src/Action/GetCollectionAction.php

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/Action/GetItemAction.php

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/Action/NullAction.php renamed to src/Action/PlaceholderAction.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@
1212
namespace ApiPlatform\Core\Action;
1313

1414
/**
15-
* Empty action. Useful to trigger the kernel.view event without doing anything specific in the action
16-
* (e.g. the POST action).
15+
* Placeholder returning the data passed in parameter.
1716
*
1817
* @author Kévin Dunglas <[email protected]>
1918
*/
20-
final class NullAction
19+
final class PlaceholderAction
2120
{
22-
public function __invoke()
21+
/**
22+
* @param object $data
23+
*
24+
* @return object
25+
*/
26+
public function __invoke($data)
2327
{
28+
return $data;
2429
}
2530
}

src/Bridge/Doctrine/EventListener/ManagerViewListener.php renamed to src/Bridge/Doctrine/EventListener/WriteListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
*
2222
* @author Kévin Dunglas <[email protected]>
2323
*/
24-
final class ManagerViewListener
24+
final class WriteListener
2525
{
2626
private $managerRegistry;
2727

src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace ApiPlatform\Core\Bridge\Symfony\Bundle\DependencyInjection;
1313

14+
use phpDocumentor\Reflection\DocBlockFactoryInterface;
1415
use Symfony\Component\Config\FileLocator;
1516
use Symfony\Component\Config\Resource\DirectoryResource;
1617
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -92,7 +93,7 @@ public function load(array $configs, ContainerBuilder $container)
9293
$this->registerAnnotationLoaders($container);
9394
$this->registerFileLoaders($container);
9495

95-
if (!interface_exists('phpDocumentor\Reflection\DocBlockFactoryInterface')) {
96+
if (!interface_exists(DocBlockFactoryInterface::class)) {
9697
$container->removeDefinition('api_platform.metadata.resource.metadata_factory.php_doc');
9798
}
9899

src/Bridge/Symfony/Bundle/Resources/config/api.xml

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66

77
<services>
88
<service id="api_platform.serializer" alias="serializer" />
9-
109
<service id="api_platform.property_accessor" alias="property_accessor" public="false" />
11-
1210
<service id="api_platform.property_info" alias="property_info" public="false" />
11+
<service id="api_platform.negotiator" class="Negotiation\Negotiator" public="false" />
1312

1413
<service id="api_platform.resource_class_resolver" class="ApiPlatform\Core\Api\ResourceClassResolver" public="false">
1514
<argument type="service" id="api_platform.metadata.resource.name_collection_factory" />
@@ -41,8 +40,6 @@
4140
<argument type="service" id="api_platform.property_accessor" />
4241
</service>
4342

44-
<service id="api_platform.negotiator" class="Negotiation\Negotiator" public="false" />
45-
4643
<!-- Serializer -->
4744

4845
<service id="api_platform.serializer.context_builder" class="ApiPlatform\Core\Serializer\SerializerContextBuilder" public="false">
@@ -56,53 +53,54 @@
5653

5754
<!-- Event listeners -->
5855

59-
<service id="api_platform.listener.request.format" class="ApiPlatform\Core\EventListener\FormatRequestListener">
56+
<service id="api_platform.listener.request.format" class="ApiPlatform\Core\EventListener\FormatListener">
6057
<argument type="service" id="api_platform.negotiator" />
6158
<argument>%api_platform.formats%</argument>
6259

63-
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
60+
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="7" />
6461
</service>
6562

66-
<service id="api_platform.listener.view.serializer" class="ApiPlatform\Core\EventListener\SerializerViewListener">
67-
<argument type="service" id="api_platform.serializer" />
68-
<argument type="service" id="api_platform.serializer.context_builder" />
63+
<!-- kernel.request piorities must be >8 to be executed after the firewall -->
64+
<service id="api_platform.listener.request.data_provider" class="ApiPlatform\Core\EventListener\DataProviderListener">
65+
<argument type="service" id="api_platform.collection_data_provider" />
66+
<argument type="service" id="api_platform.item_data_provider" />
6967

70-
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="10" />
68+
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="4" />
7169
</service>
7270

73-
<service id="api_platform.listener.view.deserializer" class="ApiPlatform\Core\EventListener\DeserializerViewListener">
71+
<service id="api_platform.listener.request.deserializer" class="ApiPlatform\Core\EventListener\DeserializerListener">
7472
<argument type="service" id="api_platform.serializer" />
7573
<argument type="service" id="api_platform.serializer.context_builder" />
7674

77-
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="30" />
75+
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="2" />
7876
</service>
7977

80-
<service id="api_platform.listener.view.validator" class="ApiPlatform\Core\Bridge\Symfony\Validator\EventListener\ValidatorViewListener">
78+
<service id="api_platform.listener.view.validator" class="ApiPlatform\Core\Bridge\Symfony\Validator\EventListener\ValidatorListener">
8179
<argument type="service" id="validator" />
8280
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
8381

84-
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="30" />
82+
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="64" />
8583
</service>
8684

87-
<service id="api_platform.listener.view.responder" class="ApiPlatform\Core\EventListener\ResponderViewListener">
88-
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" />
89-
</service>
90-
91-
<!-- Action -->
85+
<service id="api_platform.listener.view.serializer" class="ApiPlatform\Core\EventListener\SerializerListener">
86+
<argument type="service" id="api_platform.serializer" />
87+
<argument type="service" id="api_platform.serializer.context_builder" />
9288

93-
<service id="api_platform.action.get_collection" class="ApiPlatform\Core\Action\GetCollectionAction">
94-
<argument type="service" id="api_platform.collection_data_provider" />
89+
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="16" />
9590
</service>
9691

97-
<service id="api_platform.action.post_collection" class="ApiPlatform\Core\Action\NullAction" />
98-
99-
<service id="api_platform.action.get_item" class="ApiPlatform\Core\Action\GetItemAction">
100-
<argument type="service" id="api_platform.item_data_provider" />
92+
<service id="api_platform.listener.view.responder" class="ApiPlatform\Core\EventListener\ResponderListener">
93+
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="8" />
10194
</service>
10295

103-
<service id="api_platform.action.put_item" alias="api_platform.action.get_item" />
96+
<!-- Action -->
10497

105-
<service id="api_platform.action.delete_item" alias="api_platform.action.get_item" />
98+
<service id="api_platform.action.placeholder" class="ApiPlatform\Core\Action\PlaceholderAction" />
99+
<service id="api_platform.action.get_collection" alias="api_platform.action.placeholder" />
100+
<service id="api_platform.action.post_collection" alias="api_platform.action.placeholder" />
101+
<service id="api_platform.action.get_item" alias="api_platform.action.placeholder" />
102+
<service id="api_platform.action.put_item" alias="api_platform.action.placeholder" />
103+
<service id="api_platform.action.delete_item" alias="api_platform.action.placeholder" />
106104
</services>
107105

108106
</container>

src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,24 +73,24 @@
7373

7474
<!-- Event listener -->
7575

76-
<service id="api_platform.doctrine.listener.view.manager" class="ApiPlatform\Core\Bridge\Doctrine\EventListener\ManagerViewListener">
76+
<service id="api_platform.doctrine.listener.view.write" class="ApiPlatform\Core\Bridge\Doctrine\EventListener\WriteListener">
7777
<argument type="service" id="doctrine" />
7878

79-
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="20" />
79+
<tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="32" />
8080
</service>
8181

8282
<!-- Doctrine Query extensions -->
8383

8484
<service id="api_platform.doctrine.orm.query_extension.eager_loading" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\EagerLoadingExtension" public="false">
85-
<tag name="api_platform.doctrine.orm.query_extension.item" priority="20" />
86-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="20" />
85+
<tag name="api_platform.doctrine.orm.query_extension.item" priority="64" />
86+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="64" />
8787
</service>
8888

8989
<service id="api_platform.doctrine.orm.query_extension.filter" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterExtension" public="false">
9090
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
9191
<argument type="service" id="api_platform.filters" />
9292

93-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="10" />
93+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="32" />
9494
</service>
9595

9696
<service id="api_platform.doctrine.orm.query_extension.pagination" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension" public="false">
@@ -105,13 +105,13 @@
105105
<argument>%api_platform.collection.pagination.enabled_parameter_name%</argument>
106106
<argument>%api_platform.collection.pagination.items_per_page_parameter_name%</argument>
107107

108-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-20" />
108+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="16" />
109109
</service>
110110

111111
<service id="api_platform.doctrine.orm.query_extension.order" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension" public="false">
112112
<argument>%api_platform.collection.order%</argument>
113113

114-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-10" />
114+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="8" />
115115
</service>
116116
</services>
117117

src/Bridge/Symfony/Bundle/Resources/config/hydra.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@
2121

2222
<!-- Event listeners -->
2323

24-
<service id="api_platform.hydra.listener.link_header_response" class="ApiPlatform\Core\Hydra\EventListener\LinkHeaderResponseListener">
24+
<service id="api_platform.hydra.listener.response.link_header" class="ApiPlatform\Core\Hydra\EventListener\LinkHeaderListener">
2525
<argument type="service" id="api_platform.router" />
2626

2727
<tag name="kernel.event_listener" event="kernel.response" method="onKernelResponse" />
2828
</service>
2929

30-
<service id="api_platform.hydra.listener.validation_exception" class="ApiPlatform\Core\Bridge\Symfony\Validator\Hydra\EventListener\ValidationExceptionListener">
30+
<service id="api_platform.hydra.listener.exception.validation" class="ApiPlatform\Core\Bridge\Symfony\Validator\Hydra\EventListener\ValidationExceptionListener">
3131
<argument type="service" id="api_platform.hydra.normalizer.constraint_violation_list" />
3232

3333
<tag name="kernel.event_listener" event="kernel.exception" method="onKernelException" />
3434
</service>
3535

36-
<service id="api_platform.hydra.listener.request_exception" class="ApiPlatform\Core\Hydra\EventListener\RequestExceptionListener">
36+
<service id="api_platform.hydra.listener.exception" class="ApiPlatform\Core\Hydra\EventListener\ExceptionListener">
3737
<argument>api_platform.hydra.action.exception</argument>
3838
<argument type="service" id="logger" on-invalid="null" />
3939

src/Bridge/Symfony/Validator/EventListener/ValidatorViewListener.php renamed to src/Bridge/Symfony/Validator/EventListener/ValidatorListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*
2525
* @author Kévin Dunglas <[email protected]>
2626
*/
27-
final class ValidatorViewListener
27+
final class ValidatorListener
2828
{
2929
private $validator;
3030
private $resourceMetadataFactory;

0 commit comments

Comments
 (0)