Visualizzazione risultati 1 fino 4 di 4

Discussione: php include classi da sottodirectory ma non da directory superiori (?!)

  1. #1
    Guest

    Predefinito php include classi da sottodirectory ma non da directory superiori (?!)

    Buonasera a tutti, sto scrivendo un progetto in php per l'università. si tratta di un piccolo "server" rest ma sto avendo problemi nella gerarchia del progetto.

    Se infatti tento di importare in una classe, tramite include_once o require_once, classi dichiarate in cartelle superiori, ottengo errore.

    la gerarchia delle classi è questa:
    ./model/DAO/test.php
    ./model/Address.php
    ./rest.php //la chiamata al server arriva qui

    se in test.php scrivo
    Codice PHP:
    include_once "../Address.php";
    ed invoco qualsiasi chiamata su Address

    ottengo questo errore:

    Codice HTML:
    <b>Fatal error</b>:  Class 'ingsw10\Address' not found in <b>/membri/softengunina10//model/DAO/test.php at line...
    se invece sposto Address nella cartella DAO, fila tutto liscio.

    francamente non capisco quale sia il problema. Ho provato anche a modificare il path con quello assoluto, ma non ne vuole sapere nulla. Se invece tento di importare da una classe in ./Model, qualcosa che si trova in ./Model/DAO, fila tutto liscio.

    altre note del progetto:
    ogni classe è contenuta nello stesso namespace ed ho riscritto .htaccess in questo modo:

    Codice PHP:
    RewriteEngine On

    RewriteCond
    %{REQUEST_FILENAME} !-f
    RewriteRule
    ^(.*)$ %{ENV:BASE}\restapi.php [QSA,L]
    RewriteRule ^(.*)$ %{ENV:BASE}\rest.php [QSA,L]
    RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]
    per poter parsare gli url rest
    Ultima modifica di softengunina10 : 24-05-2017 alle ore 21.37.55

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    I percorsi negli include e require sono relativi alla posizione dello script in esecuzione.

    Ad esempio, se hai un file in ./model/DAO/test.php che utilizza una classe definita in ./model/Address.php e viene chiamato in un file ./main.php, il percorso dovrà essere include 'model/Address.php'.

    Per semplificare le cose in questi casi si usa un autoloader.

  3. #3
    Guest

    Predefinito

    ti ringrazio moltissimo!

    non mi è chiara una cosa dell'autoloader: devo dichiararla in ogni classe che fa uso di nuove classi o solo nello script in esecuzione?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Solo nello script in esecuzione (è quello il bello! )

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •