Вопрос

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

Я проверяю, вошел ли пользователь в систему, используя метод класса $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.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top