У меня возникают некоторые проблемы при использовании контейнера IoC в Laravel 4.2
У меня есть 2 класса: BlockFactory
а также Block
, Они предназначены для отображения блоков контента (так же, как модулей Joomla), где один Block
представляет собой блок контента и BlockFactory
представляет «контейнер» этих блоков. это BlockFactory
есть метод рендеринга, который я хочу вызвать для рендеринга всех блоков.
Что я сделал, так это создал BlockServiceProvider следующим образом:
public function register()
{
$this->app->singleton('BlockFactory', function () {
return new BlockFactory();
});
$this->app->bind('block', 'Animekyun\Block\Block'); // Facade
}
Я делаю инъекцию BlockFactory
класс в Block
конструктор, чтобы я мог добавить блоки на заводе:
public function __construct(BlockFactory $blockFactory)
{
$this->blockFactory = $blockFactory;
}
public function create($title, $content, $parameters)
{
$this->title = $title;
$this->content = $content;
$this->parameters = $parameters;
return $this;
}
public function push()
{
$this->blockFactory->add($this);
}
Из того, что я понимаю, является то, что когда я использую метод singleton с контейнером IoC, я могу получить доступ к BlockFactory
изнутри контейнера, и это будет один и тот же экземпляр снова и снова. Что-то вроде глобальной переменной.
Однако я не смог получить доступ BlockFactory
в любом случае, не создавая его снова. Я старался App::make('BlockFactory')
но согласно документации он просто вызывает обратный вызов, определенный в поставщике услуг.
Это возможно? Каковы другие способы сделать это?
Задача ещё не решена.
Других решений пока нет …