Передача параметров в php включает/требует конструкцию
Я прочитал довольно много сообщений, которые очень похожи на вопрос, который я собираюсь задать, но я просто хотел быть уверенным, что не было более сложного способа сделать это. Любая обратная связь очень ценится.
Я хочу создать механизм для проверки того, имеет ли зарегистрированный пользователь, доступ к PHP скрипт, который в настоящее время называется. Если это так, script будет продолжен; если нет, script просто не работает, используя что-то вроде die('you have no access')
.
Я придумал два способа сделать это:
(пожалуйста, предположите, что мой сеансовый материал закодирован/работает нормально - то есть я вызываю session_start(), правильно настроил сеансовые вары и т.д.)
-
Сначала определите глобальную переменную, затем проверьте глобальную переменную в требуемом файле заголовка. Например:
Содержимое 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');
-
Определите функцию в файле заголовка и вызовите функцию сразу после включения/необходимости:
Содержимое 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?
Спасибо заранее.
Ответы
Ответ 1
Невозможно передать параметры, которые нужно включить или потребовать.
Однако включенный код присоединяется к потоку программы в том месте, где вы его включаете, поэтому он наследует любые переменные, которые находятся в области видимости. Так, например, если вы установите $myflag = true непосредственно перед включением, ваш включенный код сможет проверить, для чего установлен $myflag.
Тем не менее, я бы не предложил использовать эту технику. Намного лучше, чтобы ваш файл include содержал функции (или класс), а не код, который запускается прямо. Если вы включили файл, содержащий функции, вы можете вызывать свои функции с любыми параметрами, которые вы хотите в любой момент вашей программы. Это гораздо более гибкий и, как правило, лучший способ программирования.
Надеюсь, что это поможет.
Ответ 2
Включить с параметрами
Это то, что я использовал в своем недавнем проекте 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'];
Ответ 3
В прошлом многие люди не соглашались с этим подходом. Но я думаю, что это вопрос мнения.
Вы не можете передать параметр _GET или _POST с помощью функции require() или include(), но вы можете сначала установить ключ/значение _SESSION и потянуть его с другой стороны.