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
+
0
-

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
+
+1
-

jak vytvaris MenuControl?

ale stejne, mel bys pouzit tovarnu: https://doc.nette.org/…dependencies#…

Václav Kraus
Člen | 77
+
0
-

@DavidMatějka děkuju za odkaz. Nevím, kde byla chyba, ale po úpravě to běží :)

Díky moc!