Passare le variabili PHP a un file incluso?
Domanda
Dovrebbe funzionare, quindi sono davvero perplesso sul perché non funziona.
Sto verificando se un utente ha effettuato l'accesso utilizzando un metodo di classe $ session nella parte superiore di ciascuna pagina di amministrazione. Tuttavia, desidero regolare dinamicamente il file di intestazione in base al fatto che un utente abbia effettuato l'accesso e al livello di ruolo che l'utente ha.
Quindi controllo $ session- > is_logged_in ()
e poi sono andato avanti e ho definito una variabile chiamata $ logg = true
; da usare in seguito. Quindi uso un metodo $ user- > find_by_id ($ session- > id)
per creare un nuovo oggetto utente e memorizzare $ user- > role_level
in un nuovo var ha chiamato $ role_level
per un facile utilizzo.
Tutto ciò accade nella parte superiore della pagina. Più in basso nella pagina passata all'elaborazione del modulo, ecc., È il comando include (" ../_ layouts / header.php ")
. Quindi, nel file header.php, uso piccoli controlli come if (! $ Loggato) {...} else {...}
. Tuttavia ...
Ricevo i seguenti errori:
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138
Come può essere? Sto definendo le variabili nel file prima di includere header.php! Non dovrebbe funzionare?
Cordiali saluti, tutto funzionava bene fino a quando non ho provato a usare $ loggato
nel file header.php.
Soluzione
Le variabili si propagano ai file inclusi, quindi deve essere che la variabile NON sia impostata quando si chiama include: provare a verificare in tal caso, quindi capire perché la variabile non è impostata in quel punto.
Ad esempio, se hai definito $ registrato all'interno di " if " bloccare o all'interno di una funzione, quindi non si propagherà al di fuori di essa: è necessario definirla nell'ambito più esterno (allo stesso livello in cui si chiama l'istruzione include). E devi definirlo nel caso in cui l'utente non abbia effettuato l'accesso, non solo nel caso in cui l'utente abbia effettuato l'accesso. Se la variabile non è inizializzata su false, il controllo se (! $ Loggato) emetterà un avviso. Pronuncia $ logg = false; all'inizio del tuo lavoro.
Altri suggerimenti
Prova qualcosa di molto semplice, come
// file1.php
$var = "foobar";
// file2.php
include("file1.php"); // or require("file1.php");
die($var);
Funziona? Forse è un problema al di fuori del tuo codice.
Solo un'opinione ... invece di includere il codice da eseguire nello spazio globale e in base alla definizione di un'altra variabile globale, includere il file ovunque e fare in modo che il codice all'interno di header.php sia organizzato in funzioni appropriate. Quindi dove vuoi l'output di header.php, chiama la funzione appropriata con $ loggato come argomento. Ciò contribuirà a rendere il tuo codice più coerente e più facile da testare (come nei test unitari).
Invece di if (! loggato) if (vuoto ($ registrato))
. Ciò non genererà un avviso nei casi in cui la variabile non è stata impostata.