funkce __call vyhodí onshutdown

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 jeden problém u funkce __call.. Popíšu to v kódu, aby jsem se pochopili..

class NewPresenter extends MainPresenter{
	public $object;

	function __construct(){
		$this->object = $this->requireFile(); // Vytvoří novou třídu z jiného souboru
	}

	function __call($method, $args){
		print_r($method); // Vyhodí vždycky funkci onshutdown
	}
}

A moje otázka zní, jestli jde nějak udělat, abych mohl z jiné třídy volat šablony, komponenty apod.(kromě extends)??

Děkuji za odpovědi..

jiri.pudil
Nette Blogger | 1032
+
0
-

OnShutdown je událost, kterou se presenter pokouší vyvolat na konci svého běhu nebo v případě přerušení. (Běžně si to obsluhuje Nette\Object, jenže ty mu přepisuješ metodu __call(). Uvnitř té metody bys měl v každém případě postoupit obsluhu výše: parent::__call($method, $args).)

A moje otázka zní, jestli jde nějak udělat, abych mohl z jiné třídy volat šablony, komponenty apod.(kromě extends)??

Nerozumím. Čeho chceš přesně dosáhnout?

Berny
Člen | 15
+
0
-

Když je volána komeponenta nebo render, tak načíst z jiné třídy bez použití extends („Přesunutí metody z jiné třídy do presenteru“)..

jiri.pudil
Nette Blogger | 1032
+
0
-

Ad render: Pokud potřebuješ vykreslit jinou šablonu, použij setView pro view v aktuálním presenteru, popř. forward pro akci jiného presenteru.

Ad komponenty: Pořád nevím, čeho chceš docílit. Zkus popsat konkrétní use case. Ale stejně si myslím, že není nejmenší důvod to takhle znásilňovat. Komponenta koneckonců je jiná třída; jestli potřebuješ stejnou komponentu použít ve více presenterech, dej si její továrničku do nějakého BasePresenteru.

Editoval jiri.pudil (10. 5. 2013 15:18)

Berny
Člen | 15
+
0
-

Díky za odpovědi.. Mám ještě poslední otázku k těm komponentům.. Jak zjistit název volané komponenty??