Nevyhození chyby při vícekrát registrovaném CurlyBracketsFilter

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
PetrP
Člen | 587
+
0
-
public function templatePrepareFilters($template)
{
	$template->registerFilter(new CurlyBracketsFilter);
	$template->registerFilter('CurlyBracketsFilter::invoke');
	$template->registerFilter(new CurlyBracketsFilter);
	$template->registerFilter(new CurlyBracketsFilter);
}

Nemělo by se tomuhle nějak zabránit? Sice to neháže žádné chyby, ale k tehle situaci už reálně může dojít a pak se nepoužije macro

public function templatePrepareFilters($template)
{
	parent::templatePrepareFilters($template);
	$template->registerFilter($cbf = new CurlyBracketsFilter);
	$cbf->handler->macros['marvin'] = '<?php die(); ?>';
}

Ne úplně dokonalým řešením je, tedy zrusit strictnost v in_array if (in_array($callback, $this->filters)) {

Pořád to nezabrání tomuto: $template->registerFilter('CurlyBracketsFilter::invoke'); $template->registerFilter(new CurlyBracketsFilter); Možná by se celé to ověřovaní mělo předělat. ;/

David Grudl
Nette Core | 8218
+
0
-

Při použití techniky templatePrepareFilters() se chyby způsobené vícenásobnou registrací stejného filtru minimalizují, takže bych to neřešil ad absurdum, ale to zrušení striktnosti by asi nebylo na škodu.

Petr Motejlek
Člen | 293
+
0
-

Hehe, z principu ale nevadí, když použiju stejný filtr víckrát, nebo ne? Blokoval bych maximálně více použití stejné instance. Když mi někdo naháže čtyři new CurlyBracketsFilter jako filtry šablony, tak se provedou jeden po druhém — nemělo by to tedy ničemu vadit, nebo je tam něco, co jsem si teď neuvědomil? EDIT: (Tím myslím kromě režije navíc za tři spuštění filtru, které nemají šanci cokoliv udělat, protože práci za ně provedl už ten první). :D

Editoval m0t3jl (23. 7. 2009 21:58)

jasir
Člen | 746
+
0
-

Petr Motejlek napsal(a):

Hehe, z principu ale nevadí, když použiju stejný filtr víckrát, nebo ne? Blokoval bych maximálně více použití stejné instance. Když mi někdo naháže čtyři new CurlyBracketsFilter jako filtry šablony, tak se provedou jeden po druhém — nemělo by to tedy ničemu vadit, nebo je tam něco, co jsem si teď neuvědomil? EDIT: (Tím myslím kromě režije navíc za tři spuštění filtru, které nemají šanci cokoliv udělat, protože práci za ně provedl už ten první). :D

Dříve, když neexistovala kontrola, vícenásobná registrace filtru CurlyBracketsFilter způsobovala podivné a těžko odhalitelné problémy, zejména ve spojení s ajaxem a snippety. Teď se mi to nechce hledat, ale tady na fóru bys určitě na 3–4 kousky narazil.

Petr Motejlek
Člen | 293
+
0
-

jasir napsal(a):

Petr Motejlek napsal(a):

Hehe, z principu ale nevadí, když použiju stejný filtr víckrát, nebo ne? Blokoval bych maximálně více použití stejné instance. Když mi někdo naháže čtyři new CurlyBracketsFilter jako filtry šablony, tak se provedou jeden po druhém — nemělo by to tedy ničemu vadit, nebo je tam něco, co jsem si teď neuvědomil? EDIT: (Tím myslím kromě režije navíc za tři spuštění filtru, které nemají šanci cokoliv udělat, protože práci za ně provedl už ten první). :D

Dříve, když neexistovala kontrola, vícenásobná registrace filtru CurlyBracketsFilter způsobovala podivné a těžko odhalitelné problémy, zejména ve spojení s ajaxem a snippety. Teď se mi to nechce hledat, ale tady na fóru bys určitě na 3–4 kousky narazil.

To jsem nevěděl. Já jsem si ale představoval situaci, kdy by například byla šablona, která tím, že se nad ní spustí CurlyBrackets poprvé, vytvoří funkční PHP kód, ale náhodou si přidá i něco, co bude potřeba projet ještě jednou CurlyBrackets — v tuhle chvíli by se mohl hodit mít několik průchodů filtrem za sebou. Nenapadá mě ale přesný využití, spíš je to jen teoretická možnost.

kravčo
Člen | 721
+
0
-

Petr Motejlek napsal(a):

To jsem nevěděl. Já jsem si ale představoval situaci, kdy by například byla šablona, která tím, že se nad ní spustí CurlyBrackets poprvé, vytvoří funkční PHP kód, ale náhodou si přidá i něco, co bude potřeba projet ještě jednou CurlyBrackets — v tuhle chvíli by se mohl hodit mít několik průchodů filtrem za sebou. Nenapadá mě ale přesný využití, spíš je to jen teoretická možnost.

O tejto teoretickej možnosti tu na fóre už prebehla diskusia. Po nej sa po viacnásobnej registrácii rovnakého filtra začala vyhadzovať výnimka…