#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