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!