diff --git a/core/lib/Drupal/Core/ControllerInterface.php b/core/lib/Drupal/Core/ControllerInterface.php new file mode 100644 index 0000000..4a46905 --- /dev/null +++ b/core/lib/Drupal/Core/ControllerInterface.php @@ -0,0 +1,24 @@ +container->get($service), $method); + } + + // Controller in the class::method notation. if (strpos($controller, '::') !== FALSE) { list($class, $method) = explode('::', $controller, 2); - if (!class_exists($class)) { throw new \InvalidArgumentException(sprintf('Class "%s" does not exist.', $class)); } - - $controller = new $class(); - if ($controller instanceof ContainerAwareInterface) { - $controller->setContainer($this->container); + if (in_array('Drupal\Core\ControllerInterface', class_implements($class))) { + $controller = $class::create($this->container); } - return array($controller, $method); + else { + $controller = new $class(); + } + } + else { + throw new \LogicException(sprintf('Unable to parse the controller name "%s".', $controller)); } - // service:method - if (substr_count($controller, ':') == 1) { - // controller in the service:method notation - list($service, $method) = explode(':', $controller, 2); - return array($this->container->get($service), $method); + if ($controller instanceof ContainerAwareInterface) { + $controller->setContainer($this->container); } - throw new \LogicException(sprintf('Unable to parse the controller name "%s".', $controller)); + return array($controller, $method); } + } diff --git a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php b/core/modules/user/lib/Drupal/user/UserAutocompleteController.php index 9b668bf..89c8ea3 100644 --- a/core/modules/user/lib/Drupal/user/UserAutocompleteController.php +++ b/core/modules/user/lib/Drupal/user/UserAutocompleteController.php @@ -8,11 +8,14 @@ use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\DependencyInjection\ContainerInterface; + +use Drupal\Core\ControllerInterface; /** * Controller routines for taxonomy user routes. */ -class UserAutocompleteController { +class UserAutocompleteController implements ControllerInterface { /** * The user autocomplete helper class to find matching user names. @@ -32,6 +35,15 @@ public function __construct(UserAutocomplete $user_autocomplete) { } /** + * Implements \Drupal\Core\ControllerInterface::create(). + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('user.autocomplete') + ); + } + + /** * Returns response for the user autocompletion. * * @param \Symfony\Component\HttpFoundation\Request $request diff --git a/core/modules/user/lib/Drupal/user/UserBundle.php b/core/modules/user/lib/Drupal/user/UserBundle.php index 6cf5f52..f7c4a88 100644 --- a/core/modules/user/lib/Drupal/user/UserBundle.php +++ b/core/modules/user/lib/Drupal/user/UserBundle.php @@ -27,8 +27,6 @@ public function build(ContainerBuilder $container) { $container ->register('user.data', 'Drupal\user\UserData') ->addArgument(new Reference('database')); - $container->register('user.autocomplete_controller', 'Drupal\user\UserAutocompleteController') - ->addArgument(new Reference('user.autocomplete')); $container->register('user.autocomplete', 'Drupal\user\UserAutocomplete') ->addArgument(new Reference('database')) ->addArgument(new Reference('config.factory')); diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index ad70759..34b6059 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -8,13 +8,13 @@ user_register: user_autocomplete: pattern: '/user/autocomplete' defaults: - _controller: 'user.autocomplete_controller:autocompleteUser' + _controller: '\Drupal\user\UserAutocompleteController::autocompleteUser' requirements: _permission: 'access user profiles' user_autocomplete_anonymous: pattern: '/user/autocomplete/anonymous' defaults: - _controller: 'user.autocomplete_controller:autocompleteUserAnonymous' + _controller: '\Drupal\user\UserAutocompleteController::autocompleteUserAnonymous' requirements: _permission: 'access user profiles' diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/CachedDataUITest.php b/core/modules/views/lib/Drupal/views/Tests/UI/CachedDataUITest.php index 71be3b8..cd08f42 100644 --- a/core/modules/views/lib/Drupal/views/Tests/UI/CachedDataUITest.php +++ b/core/modules/views/lib/Drupal/views/Tests/UI/CachedDataUITest.php @@ -31,7 +31,6 @@ public static function getInfo() { * Tests the user tempstore views data in the UI. */ public function testCacheData() { - $controller = $this->container->get('views_ui.controller'); $view = entity_load('view', 'test_view'); $temp_store = $this->container->get('user.tempstore')->get('views'); diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php index d31ab04..99fa8c4 100644 --- a/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php +++ b/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php @@ -8,6 +8,7 @@ namespace Drupal\views\Tests\UI; use Drupal\views\Tests\ViewUnitTestBase; +use Drupal\views_ui\Routing\ViewsUIController; /** * Tests the views ui tagging functionality. @@ -45,7 +46,7 @@ public function testViewsUiAutocompleteTag() { } // Make sure just ten results are returns. - $controller = $this->container->get('views_ui.controller'); + $controller = ViewsUIController::create($this->container); $request = $this->container->get('request'); $request->query->set('q', 'autocomplete_tag_test'); $result = $controller->autocompleteTag($request); diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php index f8167e1..d7f6d53 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/BreakLockForm.php @@ -7,6 +7,9 @@ namespace Drupal\views_ui\Form; +use Symfony\Component\DependencyInjection\ContainerInterface; + +use Drupal\Core\ControllerInterface; use Drupal\Core\Form\FormInterface; use Drupal\views\ViewStorageInterface; use Drupal\Core\Entity\EntityManager; @@ -15,7 +18,7 @@ /** * Builds the form to break the lock of an edited view. */ -class BreakLockForm implements FormInterface { +class BreakLockForm implements FormInterface, ControllerInterface { /** * Stores the Entity manager. @@ -45,6 +48,16 @@ public function __construct(EntityManager $entity_manager, TempStoreFactory $tem } /** + * Implements \Drupal\Core\ControllerInterface::create(). + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.entity'), + $container->get('user.tempstore') + ); + } + + /** * Creates a new instance of this form. * * @param \Drupal\views\ViewStorageInterface $view diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php index fba4fa1..82ea585 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Form/SettingsFormBase.php @@ -7,13 +7,16 @@ namespace Drupal\views_ui\Form; +use Symfony\Component\DependencyInjection\ContainerInterface; + use Drupal\Core\Config\ConfigFactory; +use Drupal\Core\ControllerInterface; use Drupal\system\SystemConfigFormBase; /** * Form builder for the advanced admin settings page. */ -abstract class SettingsFormBase extends SystemConfigFormBase { +abstract class SettingsFormBase extends SystemConfigFormBase implements ControllerInterface { /** * Stores the views configuration. @@ -33,6 +36,15 @@ public function __construct(ConfigFactory $config_factory) { } /** + * Implements \Drupal\Core\ControllerInterface::create(). + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('config.factory') + ); + } + + /** * Creates a new instance of this form. * * @return array diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php index 025504c..a97217e 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/Routing/ViewsUIController.php @@ -13,7 +13,9 @@ use Drupal\views\ViewsDataCache; use Drupal\user\TempStore; use Drupal\user\TempStoreFactory; +use Drupal\Core\ControllerInterface; use Drupal\Core\Entity\EntityManager; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -23,7 +25,7 @@ /** * Returns responses for Views UI routes. */ -class ViewsUIController { +class ViewsUIController implements ControllerInterface { /** * Stores the Entity manager. @@ -63,6 +65,17 @@ public function __construct(EntityManager $entity_manager, ViewsDataCache $views } /** + * Implements \Drupal\Core\ControllerInterface::create(). + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('plugin.manager.entity'), + $container->get('views.views_data'), + $container->get('user.tempstore') + ); + } + + /** * Lists all of the views. * * @return array diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php index 9c16c0b..3d001a6 100644 --- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php +++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewsUiBundle.php @@ -20,17 +20,6 @@ class ViewsUiBundle extends Bundle { * Overrides \Symfony\Component\HttpKernel\Bundle\Bundle::build(). */ public function build(ContainerBuilder $container) { - $container->register('views_ui.controller', 'Drupal\views_ui\Routing\ViewsUIController') - ->addArgument(new Reference('plugin.manager.entity')) - ->addArgument(new Reference('views.views_data')) - ->addArgument(new Reference('user.tempstore')); - $container->register('views_ui.form.basic_settings', 'Drupal\views_ui\Form\BasicSettingsForm') - ->addArgument(new Reference('config.factory')); - $container->register('views_ui.form.advanced_settings', 'Drupal\views_ui\Form\AdvancedSettingsForm') - ->addArgument(new Reference('config.factory')); - $container->register('views_ui.form.breakLock', 'Drupal\views_ui\Form\BreakLockForm') - ->addArgument(new Reference('plugin.manager.entity')) - ->addArgument(new Reference('user.tempstore')); $container->register('paramconverter.views_ui', 'Drupal\views_ui\ParamConverter\ViewUIConverter') ->addArgument(new Reference('user.tempstore')) ->addTag('paramconverter'); diff --git a/core/modules/views/views_ui/views_ui.routing.yml b/core/modules/views/views_ui/views_ui.routing.yml index dfb53ca..ed81159 100644 --- a/core/modules/views/views_ui/views_ui.routing.yml +++ b/core/modules/views/views_ui/views_ui.routing.yml @@ -1,49 +1,49 @@ views_ui.list: pattern: '/admin/structure/views' defaults: - _controller: 'views_ui.controller:listing' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::listing' requirements: _permission: 'administer views' views_ui.add: pattern: '/admin/structure/views/add' defaults: - _controller: 'views_ui.controller:add' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::add' requirements: _permission: 'administer views' views_ui.settings.basic: pattern: '/admin/structure/views/settings' defaults: - _controller: 'views_ui.form.basic_settings:getForm' + _controller: '\Drupal\views_ui\Form\BasicSettingsForm::getForm' requirements: _permission: 'administer views' views_ui.settings.advanced: pattern: '/admin/structure/views/settings/advanced' defaults: - _controller: 'views_ui.form.advanced_settings:getForm' + _controller: '\Drupal\views_ui\Form\AdvancedSettingsForm::getForm' requirements: _permission: 'administer views' views_ui.reports.fields: pattern: '/admin/reports/fields/views-fields' defaults: - _controller: 'views_ui.controller:reportFields' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::reportFields' requirements: _permission: 'administer views' views_ui.reports.plugins: pattern: '/admin/reports/views-plugins' defaults: - _controller: 'views_ui.controller:reportPlugins' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::reportPlugins' requirements: _permission: 'administer views' views_ui.operation: pattern: '/admin/structure/views/view/{view}/{op}' defaults: - _controller: 'views_ui.controller:ajaxOperation' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::ajaxOperation' requirements: _permission: 'administer views' op: 'enable|disable' @@ -51,7 +51,7 @@ views_ui.operation: views_ui.clone: pattern: '/admin/structure/views/view/{view}/clone' defaults: - _controller: 'views_ui.controller:cloneForm' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::cloneForm' requirements: _permission: 'administer views' @@ -65,7 +65,7 @@ views_ui.delete: views_ui.autocomplete: pattern: '/admin/views/ajax/autocomplete/tag' defaults: - _controller: 'views_ui.controller:autocompleteTag' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::autocompleteTag' requirements: _permission: 'administer views' @@ -75,7 +75,7 @@ views_ui.edit: tempstore: view: 'views' defaults: - _controller: 'views_ui.controller:edit' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::edit' requirements: _permission: 'administer views' @@ -85,7 +85,7 @@ views_ui.edit.display: tempstore: view: 'views' defaults: - _controller: 'views_ui.controller:edit' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::edit' display_id: NULL requirements: _permission: 'administer views' @@ -96,7 +96,7 @@ views_ui.preview: tempstore: view: 'views' defaults: - _controller: 'views_ui.controller:preview' + _controller: '\Drupal\views_ui\Routing\ViewsUIController::preview' display_id: NULL requirements: _permission: 'administer views' @@ -104,7 +104,7 @@ views_ui.preview: views_ui.breakLock: pattern: '/admin/structure/views/view/{view}/break-lock' defaults: - _controller: 'views_ui.form.breakLock:getForm' + _controller: '\Drupal\views_ui\Form\BreakLockForm::getForm' display_id: NULL requirements: _permission: 'administer views'