Diskuze: Jak ošetřit absolutní cesty includů v souboru, který je includovaný z presenteru

PHP Nette Framework Nette framework Jak ošetřit absolutní cesty includů v souboru, který je includovaný z presenteru

Aktivity (1)
Avatar
Štěpán
Člen
Avatar
Štěpán:9. srpna 18:43

Nový projekt v nette, ve kterém potřebuju používat starý systém v php (asi 600 historických souborů, časté requiry). Přistupuju do něj z presenteru, který se jmenuje Old:

class OldPresenter extends BasePresenter {

        private $oldContent='';

        public function renderDefault() {

                $this->template->oldContent= $this->oldContent;
        }

        public function actionDefault($file='index',$folder= null) {

                if($folder!== null)
                {

                        $folder.='/';
                }
                require "../vendor/old/{$folder}{$file}.php";
                $this->oldContent=$homepage->getOldContent();

                 $this->oldContent=Strings::replace($this->oldContent, [
                         '~\.php~i'=>'',
                        '~(["|\'])obr\/~'=>'\1/obr/'
                ]);
        }
}

Naštěstí v původním systému je třída hompage, která mi vrací obsah, co se má zobrazit. Nahrazuju si všechny odkazy na konkrétní skripty cestami k presenteru old, což mi funguje.
Původně to zobrazovalo cestu k souboru neco.php a já to nahradím na /old/neco, router to převede na /old/?file=neco a já to muzu includovat.

$router[] = new Route('/old[/<folder>]/<file>', array(
                                        'presenter' => 'Old',
                                        'action'        => 'default'
                                        ), Route::ONE_WAY);

Problém je, že každý skript z těch asi 800 na začátku má require('requ­ire.php'), ve kterém se načítají základní třídy, funkce apod. U skriptů, které jsou ve složce /vendor/old a mají require('requ­ire.php') je vše ok, ale pokud se jedná o jinou složku /vendor/old/slozka, všechny skripty tam mají require ('../require.php');
laděnka píše
require(../re­quire.php): failed to open stream: No such file or directory.

Asi proto, že includovaný skritpt je v nette soubor www/index.php a ne /vendor/old/sloz­ka/neco.php

Nenapadá prosím někoho, jak to ošetřit, těch souborů v těch složkách jsou stovky a ty includy nejsou jen na začátku a na ten jeden soubor.
Díky
Š+

 
Odpovědět 9. srpna 18:43
Avatar
Štěpán
Člen
Avatar
Štěpán:9. srpna 18:49

Ještě doplním, že jsem v zoufalství zkoušel v tom původním skriptu změnit require(../re­quire.php): na require(requi­re.php) i require(../../re­quire.php): a stejná hláška, že soubor neexistuje.:)

 
Nahoru Odpovědět 9. srpna 18:49
Avatar
Štěpán
Člen
Avatar
Štěpán:9. srpna 19:00

Tak jsem na to přišel nakonec sám:)

if($folder!== null)
{
        chdir("../vendor/old/$folder/");
}
else
{
         chdir("../vendor/old/");
}
require "{$file}.php";
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět 9. srpna 19:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.