diff --git a/core/modules/field_ui/field_ui.services.yml b/core/modules/field_ui/field_ui.services.yml index 5c72aff..cfc1214 100644 --- a/core/modules/field_ui/field_ui.services.yml +++ b/core/modules/field_ui/field_ui.services.yml @@ -1,6 +1,7 @@ services: field_ui.subscriber: class: Drupal\field_ui\Routing\RouteSubscriber + arguments: ['@plugin.manager.entity'] tags: - { name: event_subscriber } access_check.field_ui.view_mode: diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php index e062eb8..3884a3e 100644 --- a/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php +++ b/core/modules/field_ui/lib/Drupal/field_ui/Routing/RouteSubscriber.php @@ -11,6 +11,7 @@ use Drupal\Core\Routing\RoutingEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Routing\Route; +use Drupal\Core\Entity\EntityManager; /** * Subscriber for Field UI routes. @@ -18,6 +19,23 @@ class RouteSubscriber implements EventSubscriberInterface { /** + * The entity type manager + * + * @var \Drupal\Core\Entity\EntityManager + */ + protected $manager; + + /** + * @todo. + * + * @param \Drupal\Core\Entity\EntityManager $manager + * The entity type manager. + */ + public function __construct(EntityManager $manager) { + $this->manager = $manager; + } + + /** * {@inheritdoc} */ public static function getSubscribedEvents() { @@ -30,50 +48,65 @@ public static function getSubscribedEvents() { */ public function routes(RouteBuildEvent $event) { $collection = $event->getRouteCollection(); - foreach (entity_get_info() as $entity_type => $entity_info) { + foreach ($this->manager->getDefinitions() as $entity_type => $entity_info) { if ($entity_info['fieldable'] && isset($entity_info['entity_menu_base_path'])) { $path = $entity_info['entity_menu_base_path']; - $requirements = array('_permission' => 'administer ' . $entity_type . ' fields'); - - $route = new Route("$path/fields/{field_instance}/delete", array( - '_form' => '\Drupal\field_ui\Form\FieldDeleteForm'), $requirements); - $collection->add("field_ui.delete.$entity_type", $route); - $route = new Route("$path/fields/{field_instance}", array( - '_form' => '\Drupal\field_ui\Form\FieldEditForm'), $requirements); + $route = new Route( + "$path/fields/{field_instance}", + array('_form' => '\Drupal\field_ui\Form\FieldEditForm'), + array('_permission' => 'administer ' . $entity_type . ' fields') + ); $collection->add("field_ui.edit.$entity_type", $route); - $route = new Route("$path/fields/{field_instance}/widget-type", array( - '_form' => '\Drupal\field_ui\Form\FieldWidgetTypeForm'), $requirements); + $route = new Route( + "$path/fields/{field_instance}/widget-type", + array('_form' => '\Drupal\field_ui\Form\FieldWidgetTypeForm'), + array('_permission' => 'administer ' . $entity_type . ' fields') + ); $collection->add("field_ui.widget_type.$entity_type", $route); - $route = new Route("$path/fields/{field_instance}/field-settings", array( - '_form' => '\Drupal\field_ui\Form\FieldSettingsForm'), $requirements); + $route = new Route( + "$path/fields/{field_instance}/field-settings", + array('_form' => '\Drupal\field_ui\Form\FieldSettingsForm'), + array('_permission' => 'administer ' . $entity_type . ' fields') + ); $collection->add("field_ui.settings.$entity_type", $route); - $defaults = array( - 'entity_type' => $entity_type, + $route = new Route( + "$path/fields/{field_instance}/delete", + array('_form' => '\Drupal\field_ui\Form\FieldDeleteForm'), + array('_permission' => 'administer ' . $entity_type . ' fields') ); + $collection->add("field_ui.delete.$entity_type", $route); + // If the entity type has no bundles, use the entity type. + $defaults['entity_type'] = $entity_type; if (empty($entity_info['entity_keys']['bundle'])) { $defaults['bundle'] = $entity_type; } - $route = new Route("$path/fields", array( - '_form' => '\Drupal\field_ui\FieldOverview') + $defaults, $requirements); + $route = new Route( + "$path/fields", + array('_form' => '\Drupal\field_ui\FieldOverview') + $defaults, + array('_permission' => 'administer ' . $entity_type . ' fields') + ); $collection->add("field_ui.overview.$entity_type", $route); - $route = new Route("$path/display", array( - '_form' => '\Drupal\field_ui\DisplayOverview', - 'view_mode' => 'default') + $defaults, array( - '_permission' => 'administer ' . $entity_type . ' display')); + $route = new Route( + "$path/display", + array('_form' => '\Drupal\field_ui\DisplayOverview') + $defaults, + array('_permission' => 'administer ' . $entity_type . ' display') + ); $collection->add("field_ui.display_overview.$entity_type", $route); foreach (entity_get_view_modes($entity_type) as $view_mode => $view_mode_info) { - $route = new Route("$path/display/$view_mode", array( - '_form' => '\Drupal\field_ui\DisplayOverview', - 'view_mode' => $view_mode) + $defaults, array( - '_field_ui_view_mode_access' => 'administer ' . $entity_type . ' display', - )); + $route = new Route( + "$path/display/$view_mode", + array( + '_form' => '\Drupal\field_ui\DisplayOverview', + 'view_mode' => $view_mode, + ) + $defaults, + array('_field_ui_view_mode_access' => 'administer ' . $entity_type . ' display')); $collection->add("field_ui.display_overview.$entity_type.$view_mode", $route); } }