Registrace Latte filtru – Nesting level too deep

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

Zdravím,

převádím jeden svůj projekt na Nette 2, vše jde zatím bez vétších problémů. Narazil jsem však na jednu věc při kompilaci šablon a registraci latte filtru. Jde o metodu registerFilter ve třídě Template. Registrace filtru skončí chybou Nesting level too deep – recursive dependency? na řádku 174. Problémový je tento kód:

<?php
	public function registerFilter($callback)
	{
		$callback = callback($callback);
		if (in_array($callback, $this->filters)) { //zde zahlásí chybu
			throw new Nette\InvalidStateException("Filter '$callback' was registered twice.");
		}
		$this->filters[] = $callback;
		return $this;
	}
?>

Nezkoumal jsem kód latte filtru, pravděpodobně však dochází k cyklení při kontrole parametrů objektu. V módu strict (třetí parametr in_array TRUE) je vše v pořádku (simulace ===). Nesetkal jste se někdo s tímto problémem?

Díky.

Felix
Nette Core | 1183
+
0
-

Neregistrujes treba latte 2× nebo neco podobnyho? Nemas prepsanou metodu registr filtr, nepouzivas nejaky svoje filtry?

marau
Člen | 50
+
0
-

Tak vyřešeno, v jedné částí kódu jsem znovu registroval event onPrepareFilters a došlo tak k dvojí registraci Latte filtru, stejně by mě ale zajímalo, proč to skončilo tou chybou (vím že nesting level se dá nastavit). I při dovjí registraci Latte filteru by to podle mě mělo probublat až na tu vyjímku a neskončit chybou. V mém případě pomohl třetí parametr funkce in_array nastavit na TRUE, ale spíš došlo k pozastavení provádění protože samozřejmě === nemuselo být splněno (nejedná se o stejné objekty).

iguana007
Člen | 970
+
0
-

Zrovna dneska jsem na tu chybu narazil taky :) Škoda, že jsem nebyl u kompu, bych ti obratem odpověděl … zákeřná chyba, hlavně proto, že laděnka nenapíše, kde vznikla :)

marau
Člen | 50
+
0
-

Tyhle chyby většinou trasuju tak, že před kód vložím napříkad echo $i; a laděnka pak už ukáže celý call stack, samozřejmě je to ještě malinko složité v tom, že chybová funkce může proběhnout několikrát správně než skončí chybou, ale většinou se to dá odtrasovat a vyřešit jedním ifem :) Každopádně to většinou bývá rychlejší než to trasovat vlastními silami.

iguana007
Člen | 970
+
0
-

no co bylo ještě záhadnější bylo to, že po smazání cache se daná stránka načetla v pohodě, až po druhém načtení stejné page vyskočila výše zmíněná chyba.