| Autor | Zpráva | ||
|---|---|---|---|
| Hologos Profil |
Tak jsem to vyřešil tak, že jsem udělal 2 metody. A z té první se volá ta druhá. Pak se mi to nekontrolovatelně nezanořuje.
Zdravím, mám následující problém. Mám třídu Loader, která má metodu load($name), která načte soubor (include s tím, že když soubor neexistuje nebo se nepovede načíst, vyhodí to vyjímku). Pak má ještě metodu translateTemplate($name), která přeloží šablonu (nacachuje ji) a loadTemplate($name), která se pokusí načíst nacachovanou šablonu a pokud neexistuje, zkusí najít nenacachovanoui šablonu a přeložit ji. Takhle vypadá kód: .... // pokud kód začíná ..., je dobré použít [prephp], aby se správně spustil obarvovač, nebo ty tečky zakomentovat //...
public static function loadTemplate($name)
{
if(++self::$loop > 2)
throw new TemplateException('Cannot translate template '.$name);
try
{
Loader::load('/Cache/' . $name);
self::$loop = 0; // tady to je už pozdě
}
catch(FileException $e)
{
self::translateTemplate($name);
self::loadTemplate($name);
}
catch(TemplateException $e)
{
throw new FileException($e);
}
}
public static function translateTemplate($name)
{
.....
}
.....Problém je, že jelikož chci mít jednu metodu, aby obsluhovala oboje (jak načítáníí cachované šablony tak nenacachované šablony), není to moc elegantní. Na začátku podle toho ++self::$loop testuju, kolikáté zanoření to už je. Idea je taková: 1. loop a) poprvé nemusí existovat nacachovaná šablona -> vyjímka -> 2. loop b) existuje -> načtu -> konec 2. loop a) už se vytvořila nacachovaná šablona -> načtu -> konec b) nepodařilo se ji vytvořit (interní chyba/soubor neexistuje/atp) -> 3. loop 3. loop a) vždy konec, aby se skript nezacyklil Jak v kódu vidíte, tak ten loop nuluju pozdě, protože než se dostane k nulování, může se zanořovat (pokud šablona obsahuje load na další šablonu a v tom je další load na šablonu) a v tom případě se to ukončí, i když soubory existuje. A dřív to nejde, protože nevím, jestli se soubor povedlo načíst. Jak byste to vyřešili? Díky |
||
|
Časová prodleva: 15 let
|
|||
0