Я прочитал довольно много сообщений, которые очень похожи на вопрос, который я собираюсь задать, но я просто хотел быть уверенным, что не было более сложного способа сделать это. Любая обратная связь очень ценится.
Я хочу создать механизм для проверки того, имеет ли пользователь, входивший в систему, доступ к скрипту php, который в настоящее время вызывается . Если это так, сценарий будет продолжен; если нет, сценарий просто не работает, используя что-то вроде 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?
Заранее спасибо.
Невозможно передать параметры, которые необходимо включить или потребовать.
Однако включенный код присоединяется к потоку программы в том месте, где вы его включаете, поэтому он наследует любые переменные, которые находятся в области видимости. Так, например, если вы установите $ myflag = true непосредственно перед включением, ваш включенный код сможет проверить, для чего установлен $ myflag.
Тем не менее, я бы не предложил использовать эту технику. Намного лучше, чтобы ваш файл include содержал функции (или класс), а не код, который запускается прямо. Если вы включили файл, содержащий функции, вы можете вызывать свои функции с любыми параметрами, которые вы хотите в любой момент вашей программы. Это намного более гибкий и, как правило, лучший способ программирования.
Надеюсь, это поможет.
Это то, что я использовал в своем недавнем проекте 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'];