Это должно работать, поэтому я действительно озадачен тем, почему он не работает.
Я проверяю, зарегистрирован ли пользователь, используя метод класса $ session в верхней части каждой страницы администратора. Тем не менее, я хочу динамически настраивать файл заголовка в зависимости от того, зарегистрирован ли пользователь и на каком уровне роли у пользователя.
Поэтому я проверяю $session->is_logged_in()
а затем я пошел вперед и определил переменную $logged = true
; использовать позже. Затем я использую метод $user->find_by_id($session->id)
для создания нового объекта User и сохраняю $user->role_level
в новом var, называемом $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
Как это может быть? Я определяю vars в файле, прежде чем включать header.php! Разве это не работает?
FYI, все работало нормально, пока я не попытался использовать $logged
в файле header.php.
Переменные распространяются на включенные файлы, поэтому должно быть, что переменная НЕ установлена при вызове include: попробуйте проверить, если это так, а затем выяснить, почему переменная не установлена в этой точке.
Например, если вы определили $, зарегистрированный внутри блока «if» или внутри функции, то он не будет распространяться вне него: вы должны определить его во внешней области (на том же уровне, на котором вы вызываете оператор include) , И вы должны определить его для случая, когда пользователь не вошел в систему, а не только в том случае, когда пользователь вошел в систему. Если переменная не инициализируется значением false, проверка (! $ Logged) выдаст предупреждение. Скажем $ logged = false; в начале вашей работы.
Попробуйте что-то очень простое, например
// file1.php $var = "foobar"; // file2.php include("file1.php"); // or require("file1.php"); die($var);
в// file1.php $var = "foobar"; // file2.php include("file1.php"); // or require("file1.php"); die($var);
Это работает? Возможно, это проблема вне вашего кода.
Просто мнение … вместо того, чтобы включать код для выполнения в глобальном пространстве и в зависимости от другой определяемой глобальной переменной, включайте свой файл где бы то ни было и чтобы код внутри header.php был организован в соответствующие функции. Затем, где вы хотите получить результат из header.php, вызовите соответствующую функцию с $ logged в качестве аргумента. Это поможет сделать ваш код более сплоченным и легче тестировать (как в модульных тестах).
Вместо if (!logged)
попробуйте if (empty($logged))
. Это не будет генерировать уведомление в случаях, когда переменная не была установлена.