Předání služeb do extension
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Václav Kraus
- Člen | 77
Ahoj,
narazil jsem na problém, který nevím jak vyřešit.
Píšu extension pro renderování menu:
class MenuExtension extends Nette\DI\CompilerExtension
{
public $default = [];
/**
* Load configuration.
*/
public function loadConfiguration()
{
$config = $this->getConfig($this->default);
$builder = $this->getContainerBuilder();
$builder->addDefinition($this->prefix('menu'))
->setClass('Cms\MenuExtension\MenuControl');
$builder->addDefinition($this->prefix('menuFacade'))
->setClass('Cms\MenuExtension\DatabaseFacade');
}
}
MenuControl
class MenuControl extends Nette\Application\UI\Control
{
private $database;
/**
* MenuControl constructor.
*
* @param DatabaseFacade $database
*/
public function __construct(DatabaseFacade $database)
{
$this->database = $database;
parent::__construct();
}
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/menu.latte');
$this->template->pageList = $this->database->getMenu();
$template->render();
}
}
DatabaseFacade
class DatabaseFacade extends Nette\Object
{
/** @var Nette\Database\Context */
private $db;
public function __construct(\Nette\Database\Context $db)
{
$this->db = $db;
}
/**
* @return Nette\Database\Table\Selection
*/
public function getMenu()
{
return $this->db->table('menu');
}
}
a nakonec config.neon
extensions:
menu: CMS\MenuExtension
Pokud to používám bez databáze, tak to funguje přesně tak, jak chci. Jakmile ale přidám tu DatabaseFacade, tak to začne zlobit
Argument 1 passed to Cms\MenuExtension\MenuControl::__construct() must be an instance of Cms\MenuExtension\DatabaseFacade, none given, called in *** on line 23 and defined
Nevíte někdo, proč je to špatně? Díky za nakopnutí.
- David Matějka
- Moderator | 6445
jak vytvaris MenuControl?
ale stejne, mel bys pouzit tovarnu: https://doc.nette.org/…dependencies#…
- Václav Kraus
- Člen | 77
@DavidMatějka děkuju za odkaz. Nevím, kde byla chyba, ale po úpravě to běží :)
Díky moc!