Nette\InvalidArgumentException Component with name ‚Homepage‘ does not exist

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondraondra81
Člen | 82
+
0
-

Ahoj,
můžete mě prosím někdo říct kde je chyba. Tracy tentokráte není moc výmluvná a fakt už nevím kde hledat.

Pokouším se vytvořit komponentu na zobrazení menu z databáze.

MenuFactory.php

namespace App\Components\UI;

use \App\Model\MenuRepository;
use \Nette\Application\UI\Control;



class MenuFactory extends Control
{
    /** @var \App\Model\MenuRepository  */
    private $menuRepo;

    /** @var string  */
    private $menuTemplate;

    /**
     * @param \App\Model\MenuRepository $menuRepo
     */
    function __construct(MenuRepository $menuRepo)
    {
        parent::__construct();
        $this->menuRepo = $menuRepo;
        $this->menuTemplate = __DIR__ . '/menu.latte';
    }


    public function render()
    {
        $this->template->setFile($this->getMenuTemplate());
        $this->template->menuGroup = $this->menuRepo->getMenuGroup();
        $this->template->render();
    }

    private function getMenuTemplate()
    {
        return $this->menuTemplate;
    }
}

IMenuFactory.php

namespace App\Components\UI;


interface IMenuFactory
{

    /**
     * @return \App\Components\UI\MenuFactory
     */

    public function create();

}

v BasePresentru

/**
     * @inject
     * @var \App\Components\UI\IMenuFactory
     */
    public $menuFactory;


    /**
     * @return MenuFactory
     */
    public function createComponentMenu()
    {
        return $this->menuFactory->create();
    }

v config.neon

services:
	- App\Components\UI\IMenuFactory

v @layout.latte pak

{control menu}

Výsledkem po spuštění je chyba Nette\InvalidArgumentException Component with name ‚Homepage‘ does not exist

David Matějka
Moderator | 6445
+
0
-

za prve, class MenuFactory extends Control – ta trida by se nemela jmenovat MenuFactory, ale treba MenuControl nebo proste jen Menu

a k chybe – ukaz sablonu komponenty. Pravdepodobne tam vytvaris link pomoci makra n:href, resp. {link}, musis pouzit {plink}:

<a href="{plink Homepage:default ......}">
ondraondra81
Člen | 82
+
0
-

Wow diky, vskutku to bylo kvuli n:href.