Ответ
Symfony не реализует PSR-7 (HTTP Message Interfaces) нативно в своем ядре. Вместо этого он использует собственный, более ранний и функционально богатый компонент HttpFoundation.
Почему Symfony выбрал этот путь:
- Исторические причины: Компонент
HttpFoundationбыл создан и стабилизирован задолго до принятия PSR-7. Переписать весь фреймворк и экосистему бандлов под новый стандарт был бы крайне затратным. - Различия в философии: PSR-7 требует, чтобы объекты запроса и ответа были иммутабельными (неизменяемыми). Это хорошо для middleware-архитектуры, но может быть менее удобно и немного медленнее для традиционного MVC, где объекты запроса часто модифицируются (например, добавляются атрибуты). Объекты Symfony
RequestиResponse— мутабельны. - Удобство API:
HttpFoundationпредоставляет множество удобных методов "из коробки" для работы с сессиями, файлами, локалями, которые в PSR-7 потребовали бы дополнительных библиотек.
Пример работы с Symfony Request:
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationJsonResponse;
// Request создается из глобальных переменных
$request = Request::createFromGlobals();
// Удобный доступ к данным
$id = $request->query->get('id'); // GET-параметр
$content = $request->request->get('name'); // POST-параметр
$file = $request->files->get('avatar'); // Загруженный файл
$header = $request->headers->get('Authorization');
// Мутабельность: можно добавить атрибут для передачи данных во внутренние слои
$request->attributes->set('_controller', 'AppControllerApiController::show');
// Ответ также прост
$response = new JsonResponse(['status' => 'success', 'id' => $id]);
$response->setStatusCode(201);
$response->headers->set('Cache-Control', 'no-cache');
Совместимость с PSR-7: Несмотря на это, Symfony обеспечивает полную совместимость через отдельные компоненты. Если вам нужно работать с библиотекой, требующей PSR-7 (например, многие PSR-15 middleware), вы можете использовать:
symfony/psr-http-message-bridge: Конвертирует объектыHttpFoundationв PSR-7 и обратно.nyholm/psr7: Легковесная и быстрая реализация PSR-7, рекомендованная для использования с Symfony.
Таким образом, вы можете разрабатывать приложение на привычном HttpFoundation, а на уровне контроллера или при интеграции с внешними компонентами легко конвертировать запросы и ответы.