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
This commit is contained in:
parent
f6791516c5
commit
53ab326415
9 changed files with 183 additions and 26 deletions
|
@ -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
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\opdavies_talks;
|
||||
|
||||
use Drupal\Core\DependencyInjection\ContainerBuilder;
|
||||
use Drupal\Core\DependencyInjection\ServiceProviderInterface;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
|
||||
final class OpdaviesTalksServiceProvider implements ServiceProviderInterface {
|
||||
|
||||
public function register(ContainerBuilder $container): void {
|
||||
foreach (['Repository', 'Service'] as $directory) {
|
||||
$files = Finder::create()
|
||||
->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue