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: 13 let
|
0