Выходная буферизация
принимает то, что echo
ed между ob_start()
и ob_get_clean()
(или другими окончаниями буферизации вывода), и предотвращает его "раннюю утечку" в ответ, который php обслуживает пользователю.
Если вы удалите буферизацию вывода, содержимое ответа просто выводится «условно», однако объект $response
будет пустым, $reponse->send()
завершится ошибкой, потому что вы уже выводите другие вещи, поэтому заголовки больше не могут быть отправлены.
Итак, это работает, потому что вы либо отправляете вывод напрямую (режим работы php по умолчанию), либо вы буферизуете вывод и отправляете этот вывод "косвенно" через объект ответа (или просто выводом возврата). значение ob_get_clean
).
основное различие, на мой взгляд, состоит в том, что компоненты инфраструктуры, которые могут добавлять или не добавлять какую-либо полезность к ответу, больше не могут ничего делать, потому что среда незнаю, какой вывод вы отправите. например, полная структура Symfony отображает панель профилировщика внизу, что, безусловно, происходит, вставляя ее в ответ. Обойдя объект $response
, вы также отрицаете инъекцию. однако в вашем конкретном случае это может вообще не иметь значения.