У меня фактически был случай, похожий на этот, где у меня была страница администратора, которая была включена вверху всех моих других страниц. Вверху каждой страницы ниже строки:
<?php include '../../admin.php' ?>
У меня была бы логика php:
<?php if($_SESSION['username'] === null){ header("Location: ./adminLogin.php");}?>
Проблема с этим заключалась в том, что где-то еще я также звонил / манипулировал header(...
. После большого количества времени, проходящего через мой код, я признаю, что не мог понять, где была проблема. Затем я подумал, что каждый из этих файлов попадает в мой файл admin.php
, прежде чем делать что-либо еще. Поэтому я подумал о том, что произойдет, если я добавлю логику, которая была в верхней части каждого из моих представлений (потому что я не хотел, чтобы что-то было видно, если вы не вошли в систему) в мой файл admin.php
?
То, что произошло, было то, что, прежде чем он даже попал в любой из php / html в моих представлениях, он оценил, был ли кто-то вошел в систему ($_SESSION['username'])
) и если это был NULL
, то я просто перенаправил на страницу adminLogin , Я поместил эту логику прямо перед моим переключателем, и она отлично работала для всех моих файлов, которые когда-то требовали логику. То, как я это делал, работало в разработке, но создавало много проблем в производстве. Я обнаружил, что перемещение логики перенаправления в мой файл admin.php
не только исключает дублирование манипуляции header(...
, но фактически делает мой код более эффективным, удаляя лишнюю логику из моих файлов представления и в мой файл admin.php
.
Вместо того, чтобы помещать логику в каждый файл представления, поместите его в свой контроллер один раз перед переключателем. Работает как шарм! Это полезно, если вы не хотите, чтобы кто-либо получал доступ к каким-либо конфиденциальным представлениям, если они не вошли в систему. В моем случае это было важно для моей CMS. Однако, если есть какие-то файлы, которые вы хотите просмотреть без входа в систему, то я думаю, что оригинальной логики будет достаточно. Кажется, что вы уже нашли решение, но, надеюсь, это может быть полезно, если вы снова столкнетесь с этой ошибкой. :)