diff --git a/drupal-autowire/README.md b/drupal-autowire/README.md new file mode 100644 index 0000000..4f9e9bc --- /dev/null +++ b/drupal-autowire/README.md @@ -0,0 +1,4 @@ +# Autowire Example + +An example module to demonstrate autowiring service classes in Drupal 8, as +well as how to define Controllers as Services. diff --git a/drupal-autowire/autowire_example.info.yml b/drupal-autowire/autowire_example.info.yml new file mode 100644 index 0000000..a14949b --- /dev/null +++ b/drupal-autowire/autowire_example.info.yml @@ -0,0 +1,5 @@ +name: 'Autowire Example' +type: module +description: 'An example module to demonstrate autowiring in Drupal 8.' +core: 8.x +package: 'Example modules' diff --git a/drupal-autowire/autowire_example.routing.yml b/drupal-autowire/autowire_example.routing.yml new file mode 100644 index 0000000..7883ef4 --- /dev/null +++ b/drupal-autowire/autowire_example.routing.yml @@ -0,0 +1,6 @@ +autowire_example.user_count: + path: '/user-count' + defaults: + _controller: 'Drupal\autowire_example\Controller\ExampleController::__invoke' + requirements: + _access: 'TRUE' diff --git a/drupal-autowire/autowire_example.services.yml b/drupal-autowire/autowire_example.services.yml new file mode 100644 index 0000000..3582c33 --- /dev/null +++ b/drupal-autowire/autowire_example.services.yml @@ -0,0 +1,9 @@ +services: + Drupal\Core\Entity\EntityTypeManagerInterface: + alias: entity_type.manager + + Drupal\autowire_example\Controller\ExampleController: + autowire: true + + Drupal\autowire_example\Service\UserCounter: + autowire: true diff --git a/drupal-autowire/src/Controller/ExampleController.php b/drupal-autowire/src/Controller/ExampleController.php new file mode 100644 index 0000000..b945018 --- /dev/null +++ b/drupal-autowire/src/Controller/ExampleController.php @@ -0,0 +1,48 @@ +userCounter = $user_counter; + } + + /** + * Display the username of the current user. + * + * @return array + * A render array. + */ + public function __invoke() { + return [ + '#markup' => $this->formatPlural( + number_format($this->userCounter->getActiveUserCount()), + 'This site has 1 active user.', + 'This site has @count active users.' + ) + ]; + } + +} diff --git a/drupal-autowire/src/Service/UserCounter.php b/drupal-autowire/src/Service/UserCounter.php new file mode 100644 index 0000000..d4edc15 --- /dev/null +++ b/drupal-autowire/src/Service/UserCounter.php @@ -0,0 +1,46 @@ +userStorage = $entity_type_manager->getStorage('user'); + } + + /** + * Count the active users. + * + * @return integer + * The number of active users. + */ + public function getActiveUserCount() { + return (int) $this->userStorage + ->getQuery() + ->condition('status', 1) + ->count() + ->execute(); + } + +} diff --git a/drupal-autowire/tests/src/Kernel/Service/UserCounterTest.php b/drupal-autowire/tests/src/Kernel/Service/UserCounterTest.php new file mode 100644 index 0000000..92fa881 --- /dev/null +++ b/drupal-autowire/tests/src/Kernel/Service/UserCounterTest.php @@ -0,0 +1,50 @@ +userCounter = $this->container->get(UserCounter::class); + } + + /** @test */ + public function active_users_are_counted() { + $this->createUser(['status' => 1]); + $this->createUser(['status' => 1]); + + $this->assertEquals(2, $this->userCounter->getActiveUserCount()); + } + + /** @test */ + public function blocked_users_are_not_counted() { + $this->createUser(['status' => 1]); + $this->createUser(['status' => 0]); + + $this->assertEquals(1, $this->userCounter->getActiveUserCount()); + } + +}