yii2-extensions/inertia
| Install | |
|---|---|
composer require yii2-extensions/inertia |
|
| Latest Version: | 0.1.0 |
| PHP: | >=8.3 |
| License: | BSD-3-Clause |
| Last Updated: | Aug 14, 2026 |
| Links: | GitHub · Packagist |
Architecture
The packages have deliberately separate responsibilities:
php-forge/inertiaimplements the framework-agnostic protocol, page model, prop resolution, headers, redirects, and result objects.yii2-extensions/inertiaadapts Yii2 application state to that core and maps its results back to Yii responses.php-forge/viteprovides optional, framework-agnostic Vite manifest and development server support.
This adapter does not contain Vite integration or framework-specific JavaScript client packages.
Installation
composer require yii2-extensions/inertia:^0.2
Register its bootstrap class:
return [
'bootstrap' => [\yii\inertia\Bootstrap::class],
];
The adapter installs php-forge/inertia as its protocol dependency.
Quick start
use yii\inertia\Inertia;
use yii\web\Controller;
use yii\web\Response;
final class SiteController extends Controller
{
public function actionIndex(): Response
{
return Inertia::render(
'Dashboard',
['stats' => ['visits' => 42]],
);
}
}
The convenience controller exposes the same operation as $this->inertia():
use yii\inertia\web\Controller;
use yii\web\Response;
final class SiteController extends Controller
{
public function actionIndex(): Response
{
return $this->inertia('Dashboard', ['stats' => ['visits' => 42]]);
}
}
Configuration
use yii\inertia\Manager;
return [
'bootstrap' => [\yii\inertia\Bootstrap::class],
'components' => [
'inertia' => [
'class' => Manager::class,
'id' => 'app',
'rootView' => '@app/views/layouts/inertia.php',
'version' => static function (): string {
$path = dirname(__DIR__) . '/public/build/manifest.json';
return is_file($path) ? (string) filemtime($path) : '';
},
'shared' => [
'app.name' => static fn(): string => Yii::$app->name,
],
],
],
];
Version callbacks may accept the current yii\web\Request. Prop callbacks are framework-neutral zero-argument
closures and are resolved by php-forge/inertia.
Prop factories
The yii\inertia\Inertia facade delegates prop creation directly to the core:
return Inertia::render(
'Dashboard',
[
'stats' => Inertia::always($stats),
'users' => Inertia::defer(static fn(): array => User::find()->asArray()->all()),
'activity' => Inertia::optional(static fn(): array => $activity),
'items' => Inertia::merge($items)->append('data', 'id'),
'countries' => Inertia::once(static fn(): array => $countries)->as('countries-v1'),
],
);
The facade also provides deepMerge() and scroll(). See the
php-forge/inertia documentation for protocol and prop semantics.
Validation and flash messages
The adapter reads the session flash key configured by Manager::$errorFlashKey and passes it to the core as
props.errors. Other flashes are emitted in the top-level flash page field. Flashes are consumed only after a page
result is created, so version conflicts and failed page creation preserve them.
if (!$model->validate()) {
Yii::$app->session->setFlash('errors', $model->getErrors());
return $this->redirect(['create']);
}
Yii::$app->session->setFlash('success', 'Record created.');
return $this->redirect(['view', 'id' => $model->id]);
CSRF protection
Use yii\inertia\web\Request for Inertia's cookie-to-header CSRF flow:
'request' => [
'class' => \yii\inertia\web\Request::class,
'cookieValidationKey' => 'your-secret-key',
],
Vite
Install and configure php-forge/vite when the application uses Vite. Asset
discovery and development-server behavior are intentionally independent of this Yii2 adapter.
Documentation
Package information
Project status
Our social networks
License
Related Packages
Inertia.js server-side adapter for PHP. Handles full visits, Inertia XHR visits,...
Laravel Localizer bridges Laravel translations to your SPA frontend (React/Vue/I...