From 53ab3264150f2ed5d93c7d3abca8061f85df1472 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Wed, 13 Jan 2021 23:10:38 +0000 Subject: [PATCH] Auto-configure services and repositories Enable the auto-configuration of service and repository classes, including support for classes in subdirectories by using `getRelativePathname()` rather than `getFilename()` and making some additional changes to the result. References #347 --- .idea/oliverdavies-uk.iml | 1 + .idea/php.xml | 5 +- composer.json | 1 + composer.lock | 78 ++++++++++++++++++- .../custom/blog/opdavies_blog.services.yml | 29 +++---- .../blog/src/OpdaviesBlogServiceProvider.php | 36 +++++++++ .../blog_test/opdavies_blog_test.services.yml | 8 +- .../custom/talks/opdavies_talks.services.yml | 15 ++-- .../src/OpdaviesTalksServiceProvider.php | 36 +++++++++ 9 files changed, 183 insertions(+), 26 deletions(-) create mode 100644 web/modules/custom/blog/src/OpdaviesBlogServiceProvider.php create mode 100644 web/modules/custom/talks/src/OpdaviesTalksServiceProvider.php diff --git a/.idea/oliverdavies-uk.iml b/.idea/oliverdavies-uk.iml index c241f3d..7e065a8 100644 --- a/.idea/oliverdavies-uk.iml +++ b/.idea/oliverdavies-uk.iml @@ -140,6 +140,7 @@ + diff --git a/.idea/php.xml b/.idea/php.xml index e97eec3..63b4994 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -149,9 +149,12 @@ + - + + diff --git a/composer.json b/composer.json index 9411a45..e23001c 100644 --- a/composer.json +++ b/composer.json @@ -41,6 +41,7 @@ "drupal/stage_file_proxy": "^1.0", "drush/drush": "^10", "nesbot/carbon": "^2.33", + "symfony/config": "^3.4", "tightenco/collect": "^8.17" }, "require-dev": { diff --git a/composer.lock b/composer.lock index d36a47e..2ebc91d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cda1968001f7e8b3c87b26f9eae2d89d", + "content-hash": "65f1f71774508070ca5c65a6f52e7fd8", "packages": [ { "name": "asm89/stack-cors", @@ -5673,6 +5673,82 @@ ], "time": "2020-03-15T09:38:08+00:00" }, + { + "name": "symfony/config", + "version": "v3.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "reference": "bc6b3fd3930d4b53a60b42fe2ed6fc466b75f03f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/event-dispatcher": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/config/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T10:57:07+00:00" + }, { "name": "symfony/console", "version": "v3.4.41", diff --git a/web/modules/custom/blog/opdavies_blog.services.yml b/web/modules/custom/blog/opdavies_blog.services.yml index 713053d..f633240 100644 --- a/web/modules/custom/blog/opdavies_blog.services.yml +++ b/web/modules/custom/blog/opdavies_blog.services.yml @@ -1,24 +1,25 @@ +parameters: + container.autowiring.strict_mode: true + services: + Drupal\Core\Config\ConfigFactoryInterface: + alias: config.factory + + Drupal\Core\Entity\EntityTypeManagerInterface: + alias: entity_type.manager + + Drupal\Core\Queue\QueueFactory: + alias: queue + Drupal\opdavies_blog\EventSubscriber\PushPostToSocialMediaOnceItIsPublished: autowire: true tags: - { name: event_subscriber } Drupal\opdavies_blog\EventSubscriber\SortTagsAlphabeticallyWhenPostIsSaved: + autowire: true tags: - { name: event_subscriber } - Drupal\opdavies_blog\Repository\PostRepository: - autowire: true - - Drupal\opdavies_blog\Service\PostPusher\IftttPostPusher: - autowire: true - - Drupal\opdavies_blog\Service\PostPusher\NullPostPusher: - autowire: true - - Drupal\opdavies_blog\Service\PostPusher\PostPusher: - alias: Drupal\opdavies_blog\Service\PostPusher\IftttPostPusher - - Drupal\opdavies_blog\Repository\RelatedPostsRepository: - autowire: true + GuzzleHttp\ClientInterface: + alias: http_client diff --git a/web/modules/custom/blog/src/OpdaviesBlogServiceProvider.php b/web/modules/custom/blog/src/OpdaviesBlogServiceProvider.php new file mode 100644 index 0000000..ad1898a --- /dev/null +++ b/web/modules/custom/blog/src/OpdaviesBlogServiceProvider.php @@ -0,0 +1,36 @@ +in(__DIR__ . '/' . $directory) + ->files() + ->name('*.php'); + + foreach ($files as $file) { + $class = 'Drupal\opdavies_blog\\' . $directory . '\\' . + str_replace('/', '\\', substr($file->getRelativePathname(), 0, -4)); + + if ($container->hasDefinition($class)) { + continue; + } + + $definition = new Definition($class); + $definition->setAutowired(TRUE); + $container->setDefinition($class, $definition); + } + } + } + +} diff --git a/web/modules/custom/blog/tests/modules/blog_test/opdavies_blog_test.services.yml b/web/modules/custom/blog/tests/modules/blog_test/opdavies_blog_test.services.yml index 3213152..a7fd9ca 100644 --- a/web/modules/custom/blog/tests/modules/blog_test/opdavies_blog_test.services.yml +++ b/web/modules/custom/blog/tests/modules/blog_test/opdavies_blog_test.services.yml @@ -1,6 +1,12 @@ +parameters: + container.autowiring.strict_mode: true + services: + Drupal\Core\Entity\EntityTypeManagerInterface: + alias: entity_type.manager + Drupal\opdavies_blog\Service\PostPusher\PostPusher: - alias: Drupal\opdavies_blog\Service\PostPusher\NullPostPusher + class: Drupal\opdavies_blog\Service\PostPusher\NullPostPusher Drupal\opdavies_blog_test\Factory\PostFactory: autowire: true diff --git a/web/modules/custom/talks/opdavies_talks.services.yml b/web/modules/custom/talks/opdavies_talks.services.yml index 8533d2e..bcf3001 100644 --- a/web/modules/custom/talks/opdavies_talks.services.yml +++ b/web/modules/custom/talks/opdavies_talks.services.yml @@ -1,13 +1,10 @@ services: + Drupal\Component\Datetime\TimeInterface: + alias: datetime.time + + Drupal\Core\Entity\EntityTypeManagerInterface: + alias: entity_type.manager + Drupal\opdavies_talks\EventSubscriber\UpdateTalkNodeBeforeSave: tags: - { name: event_subscriber } - - Drupal\opdavies_talks\Repository\TalkRepository: - autowire: true - - Drupal\opdavies_talks\Service\TalkCounter: - autowire: true - - Drupal\opdavies_talks\Service\TalkDateUpdater: - autowire: true diff --git a/web/modules/custom/talks/src/OpdaviesTalksServiceProvider.php b/web/modules/custom/talks/src/OpdaviesTalksServiceProvider.php new file mode 100644 index 0000000..866125b --- /dev/null +++ b/web/modules/custom/talks/src/OpdaviesTalksServiceProvider.php @@ -0,0 +1,36 @@ +in(__DIR__ . '/' . $directory) + ->files() + ->name('*.php'); + + foreach ($files as $file) { + $class = 'Drupal\opdavies_talks\\' . $directory . '\\' . + str_replace('/', '\\', substr($file->getRelativePathname(), 0, -4)); + + if ($container->hasDefinition($class)) { + continue; + } + + $definition = new Definition($class); + $definition->setAutowired(TRUE); + $container->setDefinition($class, $definition); + } + } + } + +}