передача параметров в php include / require construct - PullRequest
19 голосов
/ 14 сентября 2010

Я прочитал довольно много постов, которые очень похожи на вопрос, который я собираюсь задать, но я просто хотел быть уверен, что не было более изощренного способа сделать это.Любая обратная связь приветствуется.

Я хочу создать механизм для проверки, имеет ли зарегистрированный пользователь доступ к php-скрипту, который в данный момент называется .Если это так, сценарий продолжится;если нет, скрипт просто не работает, используя что-то вроде die('you have no access').

Я придумал два способа сделать это:

(пожалуйста, предположим, что мои сессионные материалы закодированы / работают нормально - т.е. я вызываю session_start (), правильно настраиваю переменные сессии и т. Д.)

  1. Сначала определите глобальную переменную, а затем проверьте глобальную переменную в требуемом заголовочном файле.Например:

    Содержимое current_executing_script.php:

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

    Содержимое checkRole.php:

    if ($_SESSION['user_role'] != $roleNeedToAccessThisFile) die('no access for you');
    
  2. Определить функцию в пределахЗаголовочный файл и вызов функции сразу после включения / запроса:

    Содержимое checkRole.php:

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

    Содержимое current_executing_script.php:

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

Мне интересно, есть ли способ просто передать параметр в checkRole.php как часть конструкции include или require?

Заранее спасибо.

Ответы [ 3 ]

35 голосов
/ 14 сентября 2010

Нет способа передать параметры для включения или запроса.

Однако включенный код присоединяется к потоку программы в том месте, где вы его включаете, поэтому он наследует все переменные, находящиеся в области видимости. Так, например, если вы установите $ myflag = true непосредственно перед включением, включенный код сможет проверить, на что установлено значение $ myflag.

Тем не менее, я бы не советовал использовать эту технику. Намного лучше, если ваш включаемый файл содержит функции (или класс), а не код, который запускается сразу. Если вы включили файл, содержащий функции, то вы можете вызывать свои функции с любыми параметрами, которые вы хотите, в любой точке вашей программы. Это гораздо более гибкий и, как правило, лучший метод программирования.

Надеюсь, это поможет.

3 голосов
/ 02 октября 2016

Включить с параметрами

Это то, что я использовал в своем недавнем проекте Wordpress

Сделать функцию 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' );
} 

Получить параметры в cards-block.php:

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

Позвоните по шаблону index.php:

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

Если вы хотите перезвонить

Например, общее количество отображаемых сообщений:

Измените 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' );
   return $callback; 
} 

Изменить cards-block.php на это:

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

Измените index.php на это:

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

echo 'Count: ' . $cardsBlock['count'];
0 голосов
/ 21 января 2018

В прошлом многие люди не соглашались с таким подходом. Но я думаю, что это вопрос мнения.

Вы не можете передать параметр _GET или _POST через require () или include (), но вы можете сначала установить ключ / значение _SESSION и потянуть его на другую сторону.

...