PHP MVC: Как выйти от Действий/Контроллеров рано?

В платформе PHP MVC, как может я чисто и изящно выходить от текущего контроллера/действия, но продолжать нормальное выполнение сценария?

Например, скажем, моя платформа обычно следует за этой схемой:

  1. URL карты к контроллеру/Действию
  2. Инстанцируйте Контроллера, назовите Действие (получающий вывод)
    1. Действительно наполнить
    2. Представление рендеринга
    3. В конце Метода действия продолжите нормальное функционирование
  3. Вывод процесса при необходимости
  4. Отправьте вывод в браузер

Теперь, скажем, я хочу остановиться, "нормальное" выполнение где-нибудь в "Действительно Наполняют" шаг, чтобы, скажем, представить другое представление или сделать перенаправление заголовка, и я хочу прекратить обработать остальную часть органа по Действию, но продолжаться на "Выходной шаг" процесса

Как я могу достигнуть этого лучший способ? Мои единственные идеи:

//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() путь, потому что мы просто перенаправляем к другой странице так или иначе и не заботимся о выводе. Я ищу решение общего использования.

6
задан Austin Hyde 6 July 2010 в 01:25
поделиться

2 ответа

В методе Action вы можете собрать весь вывод в виде строки, а не чем распечатать. Распечатайте только в конце метода. Если вам нужно перенаправить или выручить, значит, вы еще ничего не выводили и можете либо перенаправить, либо вернуться из метода.

3
ответ дан 17 December 2019 в 04:41
поделиться

Возможно, вы могли бы написать собственное исключение для представления шага «Остановить нормальное выполнение на шаге« Do Stuff »»? Это грязно ... но это сработает.

2
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: