diff --git a/README.md b/README.md new file mode 100644 index 0000000..4f9e9bc --- /dev/null +++ b/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/autowire_example.info.yml b/autowire_example.info.yml index ab2bd93..a14949b 100644 --- a/autowire_example.info.yml +++ b/autowire_example.info.yml @@ -1,3 +1,5 @@ -name: Foo +name: 'Autowire Example' type: module +description: 'An example module to demonstrate autowiring in Drupal 8.' core: 8.x +package: 'Example modules' diff --git a/autowire_example.module b/autowire_example.module deleted file mode 100644 index 67b1b15..0000000 --- a/autowire_example.module +++ /dev/null @@ -1,9 +0,0 @@ -__invoke(); -} diff --git a/autowire_example.routing.yml b/autowire_example.routing.yml new file mode 100644 index 0000000..7883ef4 --- /dev/null +++ b/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/autowire_example.services.yml b/autowire_example.services.yml index 6a1bfc2..3582c33 100644 --- a/autowire_example.services.yml +++ b/autowire_example.services.yml @@ -1,5 +1,9 @@ services: - autowire_example.test: - class: Drupal\autowire_example\Service\ExampleService - arguments: - - '@current_user' + 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/src/Controller/ExampleController.php b/src/Controller/ExampleController.php new file mode 100644 index 0000000..b945018 --- /dev/null +++ b/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/src/Service/ExampleService.php b/src/Service/ExampleService.php deleted file mode 100644 index 70f7616..0000000 --- a/src/Service/ExampleService.php +++ /dev/null @@ -1,29 +0,0 @@ -currentUser = $current_user; - } - - public function __invoke() { - dump($this->currentUser->id()); - die; - } - -} diff --git a/src/Service/UserCounter.php b/src/Service/UserCounter.php new file mode 100644 index 0000000..d4edc15 --- /dev/null +++ b/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/tests/src/Kernel/Service/UserCounterTest.php b/tests/src/Kernel/Service/UserCounterTest.php new file mode 100644 index 0000000..92fa881 --- /dev/null +++ b/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()); + } + +}