annotate core/modules/serialization/src/EventSubscriber/UserRouteAlterSubscriber.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
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 }