2010-09-14 7 views
15

Ich habe schon ein paar Posts gelesen, die der Frage, die ich stellen möchte, sehr ähnlich sind, aber ich wollte nur sicher sein, dass es keinen ausgeklügelteren Weg gab mach das. Jede Rückmeldung wird sehr geschätzt.Parameter an php übergeben includes/require construct

Ich möchte einen Mechanismus erstellen, um zu überprüfen, ob ein angemeldeter Benutzer Zugriff auf das PHP-Skript hat, das gerade aufgerufen wird. Wenn dies der Fall ist, wird das Skript weiter ausgeführt. Wenn nicht, scheitert das Skript mit etwas wie die('you have no access').

kam ich mit zwei Möglichkeiten auf, dies zu erreichen:

(bitte übernehmen wird meine Session Sachen codiert/adaequat - also nenne ich session_start(), die Sitzung einzurichten vars richtig und etc)

  1. Definieren Sie zuerst eine globale Variable und überprüfen Sie dann die globale Variable in einer erforderlichen Header-Datei. Zum Beispiel:

    Inhalt des current_executing_script.php:

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

    Inhalt des checkRole.php:

    if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you'); 
    
  2. eine Funktion innerhalb der Header-Datei definieren und die Funktion unmittelbar nach einschließlich Anruf/erfordern es:

    Inhalt des checkRole.php:

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

    Inhalt des current_executing_script.php:

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

Ich frage mich, ob es einen Weg gibt im Grunde nur passieren, einen Parameter zu checkRole.php als Teil des Includes oder konstruieren erfordern?

Vielen Dank im Voraus.

Antwort

25

Es gibt keine Möglichkeit Parameter zu übergeben oder zu erfordern.

Der Code jedoch, der enthalten ist, verbindet den Programmablauf an dem Punkt, an dem Sie ihn einschließen, sodass er alle Variablen erbt, die sich im Gültigkeitsbereich befinden. Wenn Sie zum Beispiel $ myflag = true unmittelbar vor dem Einschließen setzen, kann Ihr eingeschlossener Code prüfen, auf was $ myflag eingestellt ist.

Das heißt, ich würde nicht vorschlagen, diese Technik zu verwenden. Viel besser, wenn Ihre Include-Datei Funktionen (oder eine Klasse) enthält, anstatt Code, der direkt ausgeführt wird. Wenn Sie eine Datei mit Funktionen hinzugefügt haben, können Sie Ihre Funktionen an jedem beliebigen Punkt in Ihrem Programm mit den von Ihnen gewünschten Parametern aufrufen. Es ist viel flexibler und im Allgemeinen eine bessere Programmiertechnik.

Hoffe, dass hilft.

+0

Dank Spudley, so klingt es wie Sie fühlen, dass mein Ansatz # 2 der Weg ist, dann zu gehen. Danke noch einmal. – JoJoeDad

1

Fügen Sie mit den Parametern

Das ist etwas, das ich auf meiner letzten Wordpress-Projekt verwendet haben

Machen Sie eine Funktion 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'); 
} 

Get-Parameter in cards-block.php:

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

Rufen Sie die Vorlage auf index.php:

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

Wenn Sie

Zum Beispiel ist die Gesamtzahl der Stellen, die angezeigt wurden, eine Rückruf wollen:

ändern functions.php dazu:

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

ändern cards-block.php dazu :

ändern index.php dazu:

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

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

Schön, Mister @CodeUk –

0

In der Vergangenheit haben viele Menschen mit diesem Ansatz nicht einverstanden ist. Aber ich denke, es ist eine Frage der Meinung.

Sie können nicht übergeben _GET oder _POST Param über eine require() oder include(), aber Sie können zuerst einen _SESSION Schlüssel/Wert festlegen und ziehen Sie es auf der anderen Seite.