@@ -151,3 +151,63 @@ setting:
151
151
),
152
152
),
153
153
));
154
+
155
+ Events
156
+ ------
157
+
158
+ The firewall dispatches the ``security.switch_user `` event right after the impersonation
159
+ is completed. The :class: `Symfony\\ Component\\ Security\\ Http\\ Event\\ SwitchUserEvent ` is
160
+ passed to the listener, and you can use this to get the user that you are now impersonating.
161
+
162
+ The cookbook article about
163
+ :doc: `Making the Locale "Sticky" during a User's Session </cookbook/session/locale_sticky_session >`
164
+ does not update the locale when you impersonate a user. The following code sample will show
165
+ how to change the sticky locale:
166
+
167
+ .. configuration-block ::
168
+
169
+ .. code-block :: yaml
170
+
171
+ # app/config/services.yml
172
+ services :
173
+ app.switch_user_listener :
174
+ class : AppBundle\EventListener\SwitchUserListener
175
+ tags :
176
+ - { name: kernel.event_listener, event: security.switch_user, method: onSwitchUser }
177
+
178
+ .. code-block :: xml
179
+
180
+ <!-- app/config/services.xml -->
181
+ <service id =" app.switch_user_listener" class =" AppBundle\EventListener\SwitchUserListener" >
182
+ <tag name =" kernel.event_listener" event =" security.switch_user" method =" onSwitchUser" />
183
+ </service >
184
+
185
+ .. code-block :: php
186
+
187
+ // app/config/services.php
188
+ $container
189
+ ->register('app.switch_user_listener', 'AppBundle\EventListener\SwitchUserListener')
190
+ ->addTag('kernel.event_listener', array('event' => 'security.switch_user', 'method' => 'onSwitchUser'))
191
+ ;
192
+
193
+ .. caution ::
194
+
195
+ The listener implementation assumes your ``User `` entity has a ``getLocale() `` method.
196
+
197
+ .. code-block :: php
198
+
199
+ // src/AppBundle/EventListener/SwitchUserListener.pnp
200
+ namespace AppBundle\EventListener;
201
+
202
+ use Symfony\Component\Security\Http\Event\SwitchUserEvent;
203
+
204
+ class SwitchUserListener
205
+ {
206
+ public function onSwitchUser(SwitchUserEvent $event)
207
+ {
208
+ $event->getRequest()->getSession()->set(
209
+ '_locale',
210
+ $event->getTargetUser()->getLocale()
211
+ );
212
+ }
213
+ }
0 commit comments