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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0