Передача переменных PHP во включенный файл? - PullRequest
5 голосов
/ 21 октября 2009

Это должно сработать, поэтому я действительно озадачен, почему он не работает.

Я проверяю, вошел ли пользователь, используя метод класса $ session в верхней части каждой страницы администратора. Однако я хочу динамически настраивать файл заголовка в зависимости от того, вошел ли пользователь в систему и какой уровень роли у него.

Итак, я проверяю $session->is_logged_in() и затем я определил переменную с именем $logged = true; использовать позже. Затем я использую метод $user->find_by_id($session->id) для создания нового объекта User и сохраняю $user->role_level в новой переменной с именем $role_level для удобства использования.

Это все происходит в верхней части страницы. Далее, после обработки формы и т. Д., Находится команда include("../_layouts/header.php"). Затем в файле header.php я использую маленькие проверки, такие как if(!$logged) { ... } else { ... }. Однако ...

Я получаю следующие ошибки:

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138

Как это может быть? Я определяю переменные в файле перед тем, как добавить header.php! Разве это не должно работать?

К вашему сведению, все работало нормально, пока я не попытался использовать $logged в файле header.php.

Ответы [ 4 ]

4 голосов
/ 21 октября 2009

Переменные действительно распространяются на включенные файлы, поэтому должно быть, что переменная НЕ установлена ​​при вызове include: попробуйте проверить, если да, то выясните, почему переменная не установлена ​​в этой точке.

Например, если вы определили $ logged внутри блока if или внутри функции, то он не будет распространяться за его пределы: вы должны определить его в самой внешней области (на том же уровне, на котором вы вызываете включить заявление). И вы должны определить его для случая, когда пользователь не вошел в систему, не только для случая, когда пользователь вошел в систему. Если переменная не инициализирована как false, проверка, если (! $ Logged) выдаст предупреждение. Скажите $ logged = false; в начале вашей работы.

1 голос
/ 21 октября 2009

Вместо if (!logged), попробуйте if (empty($logged)). Это не будет генерировать уведомление в тех случаях, когда переменная не была установлена.

1 голос
/ 21 октября 2009

Просто мнение ... вместо того, чтобы включать код для выполнения в глобальном пространстве и в зависимости от другой определяемой глобальной переменной, включайте ваш файл куда угодно и сделайте код внутри header.php организованным в соответствующие функции. Затем, где вы хотите получить вывод из header.php, вызовите соответствующую функцию с $ logged в качестве аргумента. Это поможет сделать ваш код более понятным и легким для тестирования (как в модульных тестах).

1 голос
/ 21 октября 2009

Попробуйте что-нибудь очень простое, например

// file1.php
$var = "foobar";

// file2.php
include("file1.php"); // or require("file1.php");
die($var);

Это работает? Может быть, это проблема за пределами вашего кода.

...