Search by

mheads / yii2-psr7-bridge

alse0017

Bridge for converting Yii2 HTTP request and response objects to and from PSR-7 HTTP messages.

Package info

github.com/mheads-dev/yii2-psr7-bridge

pkg:composer/mheads/yii2-psr7-bridge

Statistics

Installs: 12

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.0 2026-09-16 08:10 UTC

This package is auto-updated.

Last update: 2026-09-16 08:17:49 UTC


README

Русская версия

Small bridge for converting Yii2 HTTP objects to PSR-7 requests and PSR-7 responses back to Yii2 responses.

Install

composer require mheads/yii2-psr7-bridge

Install a PSR-7 / PSR-17 implementation as well. For example:

composer require nyholm/psr7

Register in DI

In the yiisoft/yii2-app-basic template this is config/web.php.

return [
    // ...
    'container' => [
        // ...
        'definitions' => [
            // ...
            // mheads/yii2-psr7-bridge
            \Mheads\Yii2Psr7Bridge\HttpMessageBridgeInterface::class                    => \Mheads\Yii2Psr7Bridge\HttpMessageBridge::class,
            \Mheads\Yii2Psr7Bridge\Request\Yii2ToPsr7RequestConverterInterface::class   => \Mheads\Yii2Psr7Bridge\Request\Yii2ToPsr7RequestConverter::class,
            \Mheads\Yii2Psr7Bridge\Response\Psr7ToYii2ResponseConverterInterface::class => \Mheads\Yii2Psr7Bridge\Response\Psr7ToYii2ResponseConverter::class,
            \Psr\Http\Message\ServerRequestFactoryInterface::class                      => \Nyholm\Psr7\Factory\Psr17Factory::class,
        ],
    ],
    // ...
];

Usage in an Action

<?php

declare(strict_types=1);

namespace app\actions;

use app\services\SomePsrRequestService;
use Mheads\Yii2Psr7Bridge\HttpMessageBridgeInterface;
use yii\base\Action;
use yii\web\Controller;
use yii\web\Response;

/**
 * @extends Action<Controller>
 */
class SomeAction extends Action
{
	public function __construct(
		string $id,
		Controller $controller,
		private readonly HttpMessageBridgeInterface $bridge,
		private readonly SomePsrRequestService $service,
		array $config = [],
	)
	{
		parent::__construct($id, $controller, $config);
	}

	public function run(): Response
	{
		$psrRequest = $this->bridge->toPsrRequest($this->controller->request);
		$psrResponse = $this->service->handle($psrRequest);

		return $this->bridge->toYiiResponse($psrResponse, $this->controller->response);
	}
}