Как я могу получить доступ к сервису внутри конструктора Bundle? Я пытаюсь создать систему, в которой набор тем может автоматически регистрироваться в службе тем, см. небольшой пример ниже (чем проще решение, тем лучше):
<?php
namespace Organization\Theme\BasicBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class ThemeBasicBundle extends Bundle
{
public function __construct() {
$themes = $this->get('organization.themes');
$themes->register(new Organization\Theme\BasicBundle\Entity\Theme(__DIR__));
}
}
Однако $this->get не работает, это может быть связано с тем, что нет гарантии, что все пакеты уже зарегистрированы. Существуют ли какие-либо «крючки» для регистрации после пакета, которые я могу использовать вместо этого? Существуют ли какие-либо специальные имена методов, которые я могу добавить в класс пакета, который запускается после создания экземпляра всех пакетов?
Класс обслуживания выглядит следующим образом:
<?php
namespace Organization\Theme\BasicBundle;
use Organization\Theme\BasicBundle\Entity\Theme;
class ThemeService
{
private $themes = array();
public function register(Theme $theme) {
$name = $theme->getName();
if (in_array($name, array_keys($this->themes))) {
throw new Exception('Unable to register theme, another theme with the same name ('.$name.') is already registered.');
}
$this->themes[$name] = $theme;
}
public function findAll() {
return $this->themes;
}
public function findByName(string $name) {
$result = null;
foreach($this->themes as $theme) {
if ($theme->getName() === $name) {
$result = $theme;
}
}
return $result;
}
}