Является ли использование фронтального контроллера и заголовков лучшим способом имитации ответа в PHP?

#php #controller

Вопрос:

В последнее время я изучал PHP-фреймворки для некоторых личных проектов, и похоже, что большинство из них используют внешний контроллер для имитации ответа. Контроллер получает параметры из запроса и перенаправляет их, отправляя соответствующие заголовки в зависимости от логики. Это и есть «ответ». Является ли это лучшим способом сделать это в PHP, или существуют другие теории о том, как обрабатывать перенаправление и ответы?

Комментарии:

1. похоже, вы используете конкретное определение ответа; но я не совсем понимаю, что именно. не могли бы вы уточнить, каков ваш контекст?

2. Я имею в виду как объект ответа, как в Java, где вы можете добавлять информацию об атрибутах для принимающей страницы (что влияет на представление), так и в смысле MVC, где маршрутизация может происходить из-за того, что содержал запрос.

Ответ №1:

фронтальный контроллер довольно хорошо подходит для веб-среды, позволяя направлять все запросы в ваше приложение. поскольку HTTP не имеет состояния, и пользователь может, в некотором смысле, случайно случайно наткнуться на части вашего приложения (т. Е. на случайный URL-адрес), внешний контроллер позволяет вам определить точку входа в ваше приложение и соответствующим образом отреагировать.

редактировать: в ответ на комментарии я думаю, что путаница может заключаться в том, что java имеет гораздо большую структуру, чем PHP, что может усложнять все это? в конечном счете PHP может обеспечить очень простое взаимодействие от запроса до ответа:

 switch($_GET['page']) {
  case "one";
      print "page one!";
      break;
  default:
      print "default page";
      break;
}
 

и оттуда вы можете создавать всевозможные слои для фронтальных контроллеров, передающих объекты запроса по цепочке фильтров контроллеру страниц, который перенаправляет данные в соответствующую модель, которая захватывает данные через уровень абстракции БД, фильтрует их, выполняет резервное копирование на контроллер и на представление, которое строит соответствующий ответ, все время срабатывая с крючками случайных событий. в конечном счете, вам (как разработчику) решать, какой уровень сложности/разделения вы ищете. в этом одновременно и красота, и зло PHP 🙂

Ответ №2:

Я думаю, что вы путаете Http-ответ с объектом ответа в рамках, на которые вы смотрели. Передний контроллер является шлюзом для вашего приложения — все запросы (http) проходят через него, и он направляет их соответствующему контроллеру/действию. Обработка запроса не обязательно приводит к возвращению ответа (часто запросы предназначены только для отправки информации на сервер), однако все запросы должны были проходить через Передний контроллер.

Объект запроса часто используется для инкапсуляции параметров среды и http-запроса и предоставления API для их извлечения. Его дополнение, объект ответа, часто используется для инкапсуляции процесса генерации http-ответа, включая заголовки генерации.

Существуют и другие подходы к обработке запросов и маршрутизации, которые не являются уникальными для PHP (как и внешний контроллер), такие как контроллер страниц или вообще не использующие структуру MVC.

Комментарии:

1. Можете ли вы расширить какую-либо идею контроллера страниц, как она применима к маршрутизации?

2. Контроллер страницы-это шаблон, в котором не задействован ни маршрутизатор, ни передний контроллер. Обычно используется упрощенный подход, такой как «если».. в противном случае блок или переключатель решает, какую страницу загружать. Это работает для простых случаев. Ознакомьтесь с этой статьей — onlamp.com/pub/a/php/2004/10/14/page_controller.html