Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\serialization\EventSubscriber;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Routing\RouteBuildEvent;
|
Chris@0
|
6 use Drupal\Core\Routing\RoutingEvents;
|
Chris@0
|
7 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Alters user authentication routes to support additional serialization formats.
|
Chris@0
|
11 */
|
Chris@0
|
12 class UserRouteAlterSubscriber implements EventSubscriberInterface {
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * The available serialization formats.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @var array
|
Chris@0
|
18 */
|
Chris@0
|
19 protected $serializerFormats = [];
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * UserRouteAlterSubscriber constructor.
|
Chris@0
|
23 *
|
Chris@0
|
24 * @param array $serializer_formats
|
Chris@0
|
25 * The available serializer formats.
|
Chris@0
|
26 */
|
Chris@0
|
27 public function __construct(array $serializer_formats) {
|
Chris@0
|
28 $this->serializerFormats = $serializer_formats;
|
Chris@0
|
29 }
|
Chris@0
|
30
|
Chris@0
|
31 /**
|
Chris@0
|
32 * {@inheritdoc}
|
Chris@0
|
33 */
|
Chris@0
|
34 public static function getSubscribedEvents() {
|
Chris@0
|
35 $events[RoutingEvents::ALTER][] = 'onRoutingAlterAddFormats';
|
Chris@0
|
36 return $events;
|
Chris@0
|
37 }
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Adds supported formats to the user authentication HTTP routes.
|
Chris@0
|
41 *
|
Chris@0
|
42 * @param \Drupal\Core\Routing\RouteBuildEvent $event
|
Chris@0
|
43 * The event to process.
|
Chris@0
|
44 */
|
Chris@0
|
45 public function onRoutingAlterAddFormats(RouteBuildEvent $event) {
|
Chris@0
|
46 $route_names = [
|
Chris@0
|
47 'user.login_status.http',
|
Chris@0
|
48 'user.login.http',
|
Chris@0
|
49 'user.logout.http',
|
Chris@0
|
50 'user.pass.http',
|
Chris@0
|
51 ];
|
Chris@0
|
52 $routes = $event->getRouteCollection();
|
Chris@0
|
53 foreach ($route_names as $route_name) {
|
Chris@0
|
54 if ($route = $routes->get($route_name)) {
|
Chris@0
|
55 $formats = explode('|', $route->getRequirement('_format'));
|
Chris@0
|
56 $formats = array_unique(array_merge($formats, $this->serializerFormats));
|
Chris@0
|
57 $route->setRequirement('_format', implode('|', $formats));
|
Chris@0
|
58 }
|
Chris@0
|
59 }
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 }
|