PHP, MVC: пытаетесь перенаправить, но контроллер отправляет вывод? - PullRequest
0 голосов
/ 19 сентября 2011

Я использовал общий подход к пользовательскому шаблону MVC

контроллер / действие / параметр

$ controller-> действие ($ param)

Как я могу реализовать метод перенаправления, то есть с использованием header (), потому что всегда есть начальный вывод с основного контроллера, но я ничего не выводил преднамеренно.

НЕ ЗАИНТЕРЕСОВАН В ИСПОЛЬЗОВАНИИ ПОПУЛЯРНЫХ РАМКИ ИЯ НЕ ПЫТАЮСЬ ПЕРЕНОСИТЬ КОЛЕСО, ПРОСТО ПЫТАЮТСЯ, ЧТОБЫ УЗНАТЬ.

Ответы [ 3 ]

3 голосов
/ 19 сентября 2011

вы можете включить буферизацию вывода для сохранения начального вывода и очистки его после функции заголовка

ob_start();
echo "output";
header("Location: other.php");
ob_end_flush();

или вы можете использовать javascript для перенаправления:

echo '<script type="text/javascript">window.location='.$url.'</script>';

РЕДАКТИРОВАТЬ:

Существует частый случай, когда при написании класса вы случайно оставляете пробел после закрывающего тега ?>, возможно, это приводит к выводу.

, чтобы избежать таких аварий, просто пропустите закрывающий ?>, это полностью законно, если только у вас нет только php в вашем файле.

0 голосов
/ 19 сентября 2011

Я бы не перенаправлял, это не нужно и может занимать много времени (больше запросов, ответов на сервер / с сервера)

Я бы использовал index.php (как основной контроллер) и обрабатывал любыезапрос к серверу, затем вызов к запрашиваемому действию контроллера, а затем вызов представления для визуализации запрошенного представления, и, наконец, основной контроллер, отправляющий визуализированное представление клиенту.index.php в качестве основного контроллера или основного приложения и централизуйте все, что вам нужно (segurity, cache, debug, logs).

Для того, чтобы обработчик контроллера индекса обрабатывал каждый запрос, вы можете использовать mod_rewrite.

Это один из подходов, который я применил для своего MVC, может быть, это поможет вам понять поток (это не единственный подход, проверьте Википедию или ресурсы).

ГЛАВНЫЙ КОНТРОЛЛЕР: перехватывает запрос и вызывает соответствующий контроллер с данными запроса (POST / GET)

CONTROLLER: выполняет действиепри задействовании вызывая модели для извлечения данных и отправляя выходные данные в представление, получая выходные данные из представления и отправляя их обратно на главный контроллер.

MODEL: получает данныеиз базы данных и управляет ею

VIEW: использует макеты, шаблоны и входящие данные для построения вывода html

0 голосов
/ 19 сентября 2011

Одним из способов является буферизация всего вывода с помощью функций ob_start. И в вашей функции перенаправления вы можете использовать заголовок.

Другим подходом может быть отправка метатега для перенаправления html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...