Transform your Yii2 applications into high-performance, PSR-compliant powerhouses
Supporting traditional SAPI, RoadRunner, FrankenPHP, and worker-based architectures
Long-running PHP workers for higher throughput and lower latency.
composer require yii2-extensions/psr-bridge:^0.1
<?php
declare(strict_types=1);
// disable PHP automatic session cookie handling
ini_set('session.use_cookies', '0');
require_once dirname(__DIR__) . '/vendor/autoload.php';
use yii2\extensions\frankenphp\FrankenPHP;
use yii2\extensions\psrbridge\http\StatelessApplication;
// Load environment variables from .env file
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
$dotenv->safeLoad();
// production default (change to 'true' for development)
define('YII_DEBUG', $_ENV['YII_DEBUG'] ?? false);
// production default (change to 'dev' for development)
define('YII_ENV', $_ENV['YII_ENV'] ?? 'prod');
require_once dirname(__DIR__) . '/vendor/yiisoft/yii2/Yii.php';
$config = require_once dirname(__DIR__) . '/config/web/app.php';
$runner = new FrankenPHP(new StatelessApplication($config));
$runner->run();
<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use yii2\extensions\psrbridge\http\StatelessApplication;
use yii2\extensions\roadrunner\RoadRunner;
define('YII_DEBUG', getenv('YII_DEBUG') ?? false);
define('YII_ENV', getenv('YII_ENV') ?? 'prod');
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$config = require dirname(__DIR__) . '/config/web/app.php';
$runner = new RoadRunner(new StatelessApplication($config));
$runner->run();
// Convert Yii2 request to PSR-7
$request = Yii::$app->request;
$psr7Request = $request->getPsr7Request();
// Convert Yii2 response to PSR-7
$response = Yii::$app->response;
$psr7Response = $response->getPsr7Response();
// Emit PSR-7 response
$emitter = new yii2\extensions\psrbridge\emitter\SapiEmitter();
$emitter->emit($psr7Response);
For detailed configuration options and advanced usage.