diff --git a/core/lib/Drupal/Core/Controller/ControllerBase.php b/core/lib/Drupal/Core/Controller/ControllerBase.php index 618bfee0549..96828fa5837 100644 --- a/core/lib/Drupal/Core/Controller/ControllerBase.php +++ b/core/lib/Drupal/Core/Controller/ControllerBase.php @@ -265,10 +265,15 @@ abstract class ControllerBase { /** * Returns the service container. * + * This method is marked private to prevent sub-classes from retrieving + * services from the container through it. Instead, + * \Drupal\Core\DependencyInjection\ContainerInjectionInterface should be used + * for injecting services. + * * @return \Symfony\Component\DependencyInjection\ContainerInterface $container * The service container. */ - protected function container() { + private function container() { return \Drupal::getContainer(); } diff --git a/core/lib/Drupal/Core/Form/FormBase.php b/core/lib/Drupal/Core/Form/FormBase.php index 3dfd81c0a9e..35da106b2f3 100644 --- a/core/lib/Drupal/Core/Form/FormBase.php +++ b/core/lib/Drupal/Core/Form/FormBase.php @@ -214,10 +214,15 @@ abstract class FormBase extends DependencySerialization implements FormInterface /** * Returns the service container. * + * This method is marked private to prevent sub-classes from retrieving + * services from the container through it. Instead, + * \Drupal\Core\DependencyInjection\ContainerInjectionInterface should be used + * for injecting services. + * * @return \Symfony\Component\DependencyInjection\ContainerInterface $container * The service container. */ - protected function container() { + private function container() { return \Drupal::getContainer(); } diff --git a/core/modules/system/tests/modules/error_test/lib/Drupal/error_test/Controller/ErrorTestController.php b/core/modules/system/tests/modules/error_test/lib/Drupal/error_test/Controller/ErrorTestController.php index 052bd5af573..d2a7dfc3a51 100644 --- a/core/modules/system/tests/modules/error_test/lib/Drupal/error_test/Controller/ErrorTestController.php +++ b/core/modules/system/tests/modules/error_test/lib/Drupal/error_test/Controller/ErrorTestController.php @@ -7,12 +7,40 @@ namespace Drupal\error_test\Controller; use Drupal\Core\Controller\ControllerBase; +use Drupal\Core\Database\Connection; +use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Controller routines for error_test routes. */ +class ErrorTestController extends ControllerBase implements ContainerInjectionInterface { -class ErrorTestController extends ControllerBase { + /** + * The database connection. + * + * @var \Drupal\Core\Database\Connection; + */ + protected $database; + + /** + * Constructs a \Drupal\error_test\Controller\ErrorTestController object. + * + * @param \Drupal\Core\Database\Connection $database + * The database connection. + */ + public function __construct(Connection $database) { + $this->database = $database; + } + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container) { + return new static( + $container->get('database') + ); + } /** * Generate warnings to test the error handler. @@ -42,7 +70,7 @@ class ErrorTestController extends ControllerBase { */ public function triggerPDOException() { define('SIMPLETEST_COLLECT_ERRORS', FALSE); - $this->container()->get('database')->query('SELECT * FROM bananas_are_awesome'); + $this->database->query('SELECT * FROM bananas_are_awesome'); } }