@@ -47,8 +47,9 @@ the word "PURGE" is a convention, technically this can be any string) instead
47
47
of ``GET `` and make the cache proxy detect this and remove the data from the
48
48
cache instead of going to the application to get a response.
49
49
50
- Here is how you can configure the Symfony reverse proxy (See :doc: `/http_cache `)
51
- to support the ``PURGE `` HTTP method::
50
+ Here is how you can configure the :ref: `Symfony reverse proxy <symfony-gateway-cache >`
51
+ to support the ``PURGE `` HTTP method. First create a caching kernel that overrides the
52
+ :method: `Symfony\\ Component\\ HttpKernel\\ HttpCache\\ HttpCache::invalidate ` method::
52
53
53
54
// src/CacheKernel.php
54
55
namespace App;
@@ -84,6 +85,58 @@ to support the ``PURGE`` HTTP method::
84
85
}
85
86
}
86
87
88
+ Then, register the class as a service that :doc: `decorates </service_container/service_decoration >`
89
+ ``http_cache ``::
90
+
91
+ .. configuration-block ::
92
+
93
+ .. code-block :: yaml
94
+
95
+ # config/services.yaml
96
+ services :
97
+ App\CacheKernel :
98
+ decorates : http_cache
99
+ arguments :
100
+ - ' @kernel'
101
+ - ' @http_cache.store'
102
+ - ' @?esi'
103
+
104
+ .. code-block :: xml
105
+
106
+ <!-- config/services.xml -->
107
+ <?xml version =" 1.0" encoding =" UTF-8" ?>
108
+ <container xmlns =" http://symfony.com/schema/dic/services"
109
+ xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
110
+ xsi : schemaLocation =" http://symfony.com/schema/dic/services
111
+ https://symfony.com/schema/dic/services/services-1.0.xsd"
112
+ >
113
+ <service id =" App\CacheKernel" decorates =" http_cache" >
114
+ <argument type =" service" id =" kernel" />
115
+ <argument type =" service" id =" http_cache.store" />
116
+ <argument type =" service" id =" esi" on-invalid =" null" />
117
+ </service >
118
+ </container >
119
+
120
+ .. code-block :: php
121
+
122
+ // config/services.php
123
+ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
124
+
125
+ use App\CacheKernel;
126
+
127
+ return function (ContainerConfigurator $containerConfigurator) {
128
+ $services = $containerConfigurator->services();
129
+
130
+ $services->set(CacheKernel::class)
131
+ ->decorate('http_cache')
132
+ ->args([
133
+ service('kernel'),
134
+ service('http_cache.store'),
135
+ service('esi')->nullOnInvalid(),
136
+ ])
137
+ ;
138
+ };
139
+
87
140
.. caution ::
88
141
89
142
You must protect the ``PURGE `` HTTP method somehow to avoid random people
0 commit comments