2010-09-14 22 views
15

Ho letto parecchi post che sono molto simili alla domanda che sto per chiedere, ma volevo solo essere sicuro che non esistesse un modo più sofisticato di Fai questo. Qualsiasi feedback è molto apprezzato.passare parametri a php include/require construct

Desidero creare un meccanismo per verificare se un utente che ha effettuato l'accesso abbia accesso allo script php attualmente chiamato. Se è così, lo script continuerà; in caso contrario, lo script fallisce semplicemente usando qualcosa come die('you have no access').

mi si avvicinò con due modi di realizzare questo:

(si prega di assumere le mie cose sessione è codificata/lavorando bene - vale a dire che io chiamo session_start(), ha istituito la sessione Le variabili di corretta ed ecc)

  1. Definire prima una variabile globale, quindi controllare la variabile globale in un file di intestazione richiesto. Per esempio:

    Contenuto current_executing_script.php:

    // the role the logged in user must have to continue on 
    $roleNeedToAccessThisFile = 'r'; 
    require 'checkRole.php'' 
    

    Contenuto checkRole.php:

    if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you'); 
    
  2. definire una funzione all'interno del file di intestazione e chiamare la funzione subito dopo l'inclusione/richiedendo it:

    Contenuto di checkRole.php:

    function checkRole($roleTheUserNeedsToAccessTheFile) { 
        return ($_SESSION['user_role'] == $roleTheUserNeedsToAccessTheFile); 
    }

    Contenuto current_executing_script.php:

    require 'checkRole.php'; 
    checkRole('r') or die('no access for you');

Mi chiedo se c'è un modo per passare fondamentalmente solo un parametro per checkRole.php come parte del includere o richiedere costruire?

Grazie in anticipo.

risposta

25

Non c'è un modo per passare parametri da includere o richiedere.

Tuttavia, il codice incluso si aggiunge al flusso del programma nel punto in cui lo si include, quindi erediterà tutte le variabili che rientrano nello scope. Ad esempio, se imposti $ myflag = true immediatamente prima dell'inserimento, il codice incluso sarà in grado di verificare a quale $ myflag è impostato.

Detto questo, non suggerirei di usare quella tecnica. Molto meglio per il tuo file include per contenere funzioni (o una classe) piuttosto che codice che viene eseguito direttamente. Se hai incluso un file contenente funzioni, puoi chiamare le tue funzioni con tutti i parametri che desideri in qualsiasi punto del tuo programma. È molto più flessibile e generalmente una tecnica di programmazione migliore.

Spero che questo aiuti.

+0

Grazie Spudley, quindi sembra che tu ritenga che il mio approccio # 2 sia la strada da percorrere in quel momento. Grazie ancora. – JoJoeDad

1

Includere con i parametri

Questa è una cosa che ho usato nel mio recente progetto di Wordpress

Fare una funzione functions.php:

function get_template_partial($name, $parameters) { 
    // Path to templates 
    $_dir = get_template_directory() . '/partials/'; 
    // Unless you like writing file extensions 
    include($_dir . $name . '.php'); 
} 

ottenere i parametri in cards-block.php:

// $parameters is within the function scope 
$args = array(
    'post_type' => $parameters['query'], 
    'posts_per_page' => 4 
); 

Chiama il modello index.php:

get_template_partial('cards-block', array(
    'query' => 'tf_events' 
)); 

Se si desidera un callback

Ad esempio, il numero totale di messaggi che sono stati visualizzati:

Change functions.php a questo:

function get_template_partial($name, $parameters) { 
    // Path to templates 
    $_dir = get_template_directory() . '/partials/'; 
    // Unless you like writing file extensions 
    include($_dir . $name . '.php'); 
    return $callback; 
} 

Change cards-block.php a questo :

// $parameters is within the function scope 
$args = array(
    'post_type' => $parameters['query'], 
    'posts_per_page' => 4 
); 
$callback = array(
    'count' => 3 // Example 
); 

Change index.php a questo:

$cardsBlock = get_template_partial('cards-block', array(
    'query' => 'tf_events' 
)); 

echo 'Count: ' . $cardsBlock['count']; 
+0

Nice, Mister @ CodeUk –

0

In passato, molte persone hanno in disaccordo con questo approccio. Ma penso che sia una questione di opinione.

Non è possibile passare _GET o _POST param tramite require() o include(), ma è possibile prima impostare un valore/chiave _SESSION e trascinarlo sull'altro lato.