Proměnná do @layout.latte nefakčí

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

Zdravím,

pohledal jsem si tady na fóru řešení, ale stále mi to nefunguje, v nette dokumentaci jsem nenašel nic…

Tohle mi prostě v Basepresenteru nefunguje…

public function beforeRender() {

        $this->template->foo = 'bar';
    }

Proč?
Může někdo poradit? Díky moc!

Editoval snazimse (5. 1. 2018 10:28)

David Matějka
Moderator | 6445
+
0
-

co znamena nefunguje? co mas v layoutu? a neprekryvas v nejakem konkretnim presenteru tu metodu beforeRender?

Tyraxor
Člen | 31
+
0
-

Ahoj,
tohle by mělo fungovat, ale radši to uprav podle kódu níže a ujisti se že to máš ve správném presenteru, jelikož to chceš do layout, tak by to mělo asi být v nějakém BasePresenteru od kterého budou dědit konkrétní Presdentery.

protected function beforeRender() {
	parent::beforeRender();
	$this->template->foo = 'bar';
}
snazimse
Člen | 43
+
0
-

David Matějka napsal(a):

co znamena nefunguje? co mas v layoutu? a neprekryvas v nejakem konkretnim presenteru tu metodu beforeRender?

Co to znamená? Tohle: Undefined variable

Ne nepřekrývám nic…

V layoutu mám layout, nic zvláštního :)

snazimse
Člen | 43
+
0
-

Tyraxor napsal(a):

Ahoj,
tohle by mělo fungovat, ale radši to uprav podle kódu níže a ujisti se že to máš ve správném presenteru, jelikož to chceš do layout, tak by to mělo asi být v nějakém BasePresenteru od kterého budou dědit konkrétní Presdentery.

protected function beforeRender() {
	parent::beforeRender();
	$this->template->foo = 'bar';
}

Je to v Basepresenteru…

parent::beforeRender();

na to nemá vliv :)

Tyraxor
Člen | 31
+
0
-

teď možná ne ale v budoucnu by ti mohlo dělat problém pokud to tam mít nebudeš, „Undefined variable“ znamená že proměná není definována, takže buď tam máš někde překlep ve jméně proměné, nebo se ta funkce beforeRender vůbec nepouští.

snazimse
Člen | 43
+
0
-

Tyraxor napsal(a):

teď možná ne ale v budoucnu by ti mohlo dělat problém pokud to tam mít nebudeš, „Undefined variable“ znamená že proměná není definována, takže buď tam máš někde překlep ve jméně proměné, nebo se ta funkce beforeRender vůbec nepouští.

Znáš důvody, proč by se to nepouštělo? Nějaký tip jako např: nějaká vynechaná definice?

Tyraxor
Člen | 31
+
0
-

Funkce se pouští automaticky před renderováním šablony, tam se nic definovat nemusí. Takže buď tam máš nějaký guláš, nebo jak naznačoval David Matějka, někde si tu funkci překrýváš a nevoláš v tom překryvu právě to: parent::beforeRender();

nightfish
Člen | 519
+
0
-

snazimse napsal(a):
Znáš důvody, proč by se to nepouštělo? Nějaký tip jako např: nějaká vynechaná definice?

Jen pro pořádek – presenter, v jehož šabloně ti to píše nedefinovanou proměnnou, dědí od BasePresenteru?

snazimse
Člen | 43
+
-2
-

nightfish napsal(a):

snazimse napsal(a):
Znáš důvody, proč by se to nepouštělo? Nějaký tip jako např: nějaká vynechaná definice?

Jen pro pořádek – presenter, v jehož šabloně ti to píše nedefinovanou proměnnou, dědí od BasePresenteru?

Přímo od něj ne, já mám všechno ze sandboxu a tam je extends Nette\Application\UI\Presenter u každého presenteru, očekával jsem, že to je nějak auto propojené? Není tak?

David Matějka
Moderator | 6445
+
+1
-

no v tom pripade museji vsechny tve presentery dedit od BasePresenteru

snazimse
Člen | 43
+
-2
-

David Matějka napsal(a):

no v tom pripade museji vsechny tve presentery dedit od BasePresenteru

Takže to mám dobře? Kde tedy mám hledat? Díky

David Matějka
Moderator | 6445
+
+1
-

nemas to dobre

Přímo od něj ne, já mám všechno ze sandboxu a tam je extends Nette\Application\UI\Presenter u každého presenteru

ty konkretni presentery museji dedit od BasePresenteru, ne od UI\Presenteru

snazimse
Člen | 43
+
-2
-

David Matějka napsal(a):

nemas to dobre

Přímo od něj ne, já mám všechno ze sandboxu a tam je extends Nette\Application\UI\Presenter u každého presenteru

ty konkretni presentery museji dedit od BasePresenteru, ne od UI\Presenteru

Tak to mě nepotěšilo… to budu muset zbytečně cpát do každého možného presenteru, který má routu, očekával jsem teda lepší přístup nette, dokonce jsem čekal, že to bude automatické…

Děkuji ti za pomoc!

Jan Endel
Člen | 1016
+
0
-

Ahoj, co ti prosím vadí na dědění tvého vlastního presenteru, co rozšiřuje chování toho co v Nette je?

Můžeš prosím dovysvětlit „presenter, který má routu“? Obávám se, že tady trošku došlo k vzájemnému nepochopení.

Díky!

snazimse
Člen | 43
+
-2
-

Jan Endel napsal(a):

Ahoj, co ti prosím vadí na dědění tvého vlastního presenteru, co rozšiřuje chování toho co v Nette je?

Můžeš prosím dovysvětlit „presenter, který má routu“? Obávám se, že tady trošku došlo k vzájemnému nepochopení.

Díky!

Ahoj, zbytečný zápis, komplikace…k čemu pak framework… Já měl za to, že UI\Presenter
všechno propojí krásně…

Presenter, který má routu, každý presenter má routu, čili každý, je to ironická poznámka :)

Editoval snazimse (5. 1. 2018 17:34)

duke
Člen | 650
+
+1
-

Mýlíš se. Není na tom nic zbytečného. Kdyby se to „samo“ propojilo, nebylo by to krásné, nýbrž magické. A podle čeho bys to chtělo automaticky propojovat? Podle toho, že se to jmenuje BasePresenter? A co když budeš chtít mít vícero mírně odlišných BasePresenterů? Zavedeš si obecnější magii, aby to bylo krásné nebo použiješ „krásnou“ jednoduchou dědičnost?

A platí, že každé routě odpovídá jeden nebo více presenterů, ale neplatí nutně, že každý presenter má routu.

CZechBoY
Člen | 3608
+
0
-

Spis kazdej finalni presenter ma alespon jednu routu. Abstraktni presenter/trida samozrejme nemuze byt pouzit jinak nez jako predek jine tridy.
BasePresenter se pouziva na ucely presne jako potrebujes ty.

duke
Člen | 650
+
0
-

CZechBoY napsal:

Spis kazdej finalni presenter ma alespon jednu routu.

Toto platí pouze v případě, že je definována dostatečně obecná routa (typicky s maskou obsahující řetězec <presenter>). Pravdou je, že mít finální presenter bez routy, která na něj vede, asi není zrovna smysluplné, byť by možná šlo na takový (jinak nedostupný) presenter forwardovat z akce jiného presenteru (ale nejsem si teď jist, zda by v takovém řešení nebyl nějaký další problém).

snazimse
Člen | 43
+
0
-

Díky moc za Vaše příspěvky a rady, pomohli mi, byla to moje chyba :)