В платформе PHP MVC, как может я чисто и изящно выходить от текущего контроллера/действия, но продолжать нормальное выполнение сценария?
Например, скажем, моя платформа обычно следует за этой схемой:
Теперь, скажем, я хочу остановиться, "нормальное" выполнение где-нибудь в "Действительно Наполняют" шаг, чтобы, скажем, представить другое представление или сделать перенаправление заголовка, и я хочу прекратить обработать остальную часть органа по Действию, но продолжаться на "Выходной шаг" процесса
Как я могу достигнуть этого лучший способ? Мои единственные идеи:
//in controller
protected function redirect($url) {
header("Location: $url");
exit();
}
но это полностью пропускает остальную часть выполнения платформы и выводит то, что было в буфере вывода прямо пользователю. Альтернатива:
//in dispatcher
call_user_func_array(array($controller,$action),$params);
afterwards:
...
//in controller
protected function redirect($url) {
header("Location: $url");
goto afterwards;
}
Однако это заставляет меня дергаться и идет вразрез со всем, что я изучил, особенно потому что маркировка, на которую это ссылается, находится в другом файле полностью.
Так, есть ли какой-либо другой способ достигнуть этого?
Примечание: Пример перенаправления, вероятно, должен использовать exit()
путь, потому что мы просто перенаправляем к другой странице так или иначе и не заботимся о выводе. Я ищу решение общего использования.
В методе Action вы можете собрать весь вывод в виде строки, а не чем распечатать. Распечатайте только в конце метода. Если вам нужно перенаправить или выручить, значит, вы еще ничего не выводили и можете либо перенаправить, либо вернуться из метода.
Возможно, вы могли бы написать собственное исключение для представления шага «Остановить нормальное выполнение на шаге« Do Stuff »»? Это грязно ... но это сработает.