如何訪問捆綁器構造器中的服務?我試圖創建一個系統,其中一個主題包可以自動本身的主題服務註冊,見下文(比較簡單的解決越好)小例子:Symfony:無法訪問捆綁構造器中的服務
<?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__));
}
}
然而,這 - $>獲取不起作用,這可能是因爲不能保證所有捆綁包都已經被註冊了,是否有任何捆綁註冊「鉤子」可以用來代替?是否有任何特殊的方法名稱可以添加到捆綁類中,並在所有捆綁包實例化後執行?
服務類看起來是這樣的:
<?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;
}
}
捆綁::啓動被執行。你的問題是哪種答案。但是,在構建階段執行此操作是正確的方法。 – Cerad