2010-09-14 4 views
15

J'ai lu quelques articles qui sont très similaires à la question que je vais poser, mais je voulais juste être sûr qu'il n'y avait pas de façon plus sophistiquée de fais ceci. Tout commentaire est grandement apprécié.passer les paramètres à php include/require construct

Je veux créer un mécanisme pour vérifier si un utilisateur connecté a accès au script php qui est actuellement appelé. Si c'est le cas, le script continuera; sinon, le script échoue juste en utilisant quelque chose comme die('you have no access').

je suis venu avec deux façons d'y parvenir:

(s'il vous plaît prendre mes affaires de session est codé/fonctionne très bien - à savoir que j'appelle session_start(), mis en place la session vars correctement et etc)

  1. Définissez d'abord une variable globale, puis vérifiez la variable globale dans un fichier d'en-tête obligatoire. Par exemple:

    Contenu de current_executing_script.php:

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

    Contenu de checkRole.php:

    if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you'); 
    
  2. Définir une fonction dans le fichier d'en-tête et appeler la fonction immédiatement après, y compris/nécessitant il:

    Contenu de checkRole.php:

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

    Contenu de current_executing_script.php:

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

Je me demande s'il y a un moyen de passer fondamentalement juste un paramètre à checkRole.php dans le cadre de l'include ou require construire?

Merci d'avance.

Répondre

25

Il n'est pas possible de transmettre des paramètres à inclure ou à exiger.

Toutefois, le code inclus joint le flux de programme à l'endroit où vous l'incluez, de sorte qu'il héritera des variables qui sont dans la portée. Par exemple, si vous définissez $ myflag = true immédiatement avant l'inclusion, votre code inclus sera capable de vérifier à quoi $ myflag est défini.

Cela dit, je ne suggérerais pas d'utiliser cette technique. Il vaut mieux que votre fichier include contienne des fonctions (ou une classe) plutôt qu'un code qui s'exécute tout de suite. Si vous avez inclus un fichier contenant des fonctions, vous pouvez appeler vos fonctions avec les paramètres que vous voulez à n'importe quel point de votre programme. C'est beaucoup plus flexible, et généralement une meilleure technique de programmation.

Espérons que ça aide.

+0

Merci Spudley, alors il semblerait que vous ayez l'impression que mon approche n ° 2 est la voie à suivre. Merci encore. – JoJoeDad

1

Inclure avec les paramètres

C'est quelque chose que je l'ai utilisé sur mon récent projet Wordpress

Faire une fonction 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'); 
} 

Obtenir paramètres cards-block.php:

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

Appeler le template index.php:

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

Si vous souhaitez un rappel

Par exemple, le nombre total de postes qui ont été affichés:

Changement functions.php à ceci:

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; 
} 

changement cards-block.php à ce :

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

Changement index.php à ceci:

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

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

Nice, Mister @CodeUk –

0

Dans le passé, beaucoup de gens ont été en désaccord avec cette approche. Mais je pense que c'est une question d'opinion.

Vous ne pouvez pas passer _GET ou _POST param via require() ou include(), mais vous pouvez d'abord définir une clé/valeur _SESSION et la tirer de l'autre côté.

Questions connexes