Component '' is not attached to ‚Nette\Application\UI\Presenter‘

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

Zdravím.
Mám tu chybu, se kterou si nevím rady a je pro mě dosti důležitá, abych využil komponenty na plno.

Komponenta

<?php

class Sitemap extends Nette\Application\UI\Control{

	public function generateSitemap(){
		return $this->getBody();
	}

	protected function getBody(){
		$query = $this->presenter->database->table(DB_NEWS); // Vyskočí error u toho řádků

		// Zpracování sql dotazu + různé atributy pro sitemap (Není důležité)

		$this->link("News:read", array(
			"id" => $query->news_id,
			"name"=> $query->news_subject
		));	// U této funkce vyskočí error

		// return ...
	}
}

Presenter

<?php
namespace AdminModule;
use Nette\Application\UI\Form,
    Sitemap;

class SitemapPresenter extends Admin{

	protected function createComponenetCreateSitemap(){
		// Formulář pro sitemap
	}

	public function processCreateSitemap(Form $form){
		$sitemapGenerator = new Sitemap;
		$sitemap = $sitemapGenerator->generateSitemap();
	}
}

Hlásí mi to, že není bezejmenná komponenta připojena k presenteru.

Jan Tvrdík
Nette guru | 2595
+
0
-

To proto, že není připojena k presenteru.

frosty22
Člen | 373
+
0
-

Přesně tak, jak píše Honza .. něco jako:

<?php
namespace AdminModule;
use Nette\Application\UI\Form,
    Sitemap;

class SitemapPresenter extends Admin{

    protected function createComponentSitemap(){
        return new Sitemap();
    }

   protected function createComponentCreateSitemap(){
        // Formulář pro sitemap
    }

    public function processCreateSitemap(Form $form){
        $sitemap = $this['sitemap']->generateSitemap();
    }
}
?>
Berny
Člen | 15
+
0
-

Aha, díky určitě si pročtu a vyzkouším.

Felix
Nette Core | 1270
+
0
-

Chybu vidím i v tom, že volas $presenter->database v komponente. Spíš si předej nějakou službu (repository nebo fasádu).