phpsoftbox / inertia
Inertia.js adapter for the PhpSoftBox framework
dev-master
2026-03-05 11:41 UTC
Requires
- php: ^8.4
- phpsoftbox/session: dev-master
- phpsoftbox/view: dev-master
- psr/http-factory: ^1.1
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cli-app: dev-master
- phpsoftbox/cs-fixer: ^1.1.0
- phpsoftbox/http-message: dev-master
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2026-03-05 11:41:46 UTC
README
Минимальный серверный адаптер Inertia.js для PhpSoftBox.
Возможности
- JSON‑ответы по
X-Inertia. - HTML‑ответы с root‑view для первого захода.
- Middleware для проверки версии ассетов и заголовка
Vary: X-Inertia.
Пример
$response = $inertia->render('Home', [ 'title' => 'Inertia App', ]);
Метаданные страницы
Можно задавать title, description, keywords через сервис PageMeta.
Данные попадут в props.meta и в HTML‑теги на первом рендере.
use PhpSoftBox\Inertia\Page\PageMeta; $meta->setTitle('Панель управления') ->setDescription('Админ‑панель проекта') ->setKeywords(['admin', 'dashboard']); return $inertia->render('Dashboard');
Breadcrumbs
use PhpSoftBox\Inertia\Page\Breadcrumbs; $breadcrumbs ->add('Главная', '/') ->add('Пользователи', '/users') ->add('Профиль', null, true); return $inertia->render('Users/Show');
Menu
use PhpSoftBox\Inertia\Page\Menu; use PhpSoftBox\Inertia\Page\MenuItem; use PhpSoftBox\Inertia\Page\MenuMatchMode; $menu = new Menu(); $menu->add( (new MenuItem('Dashboard', '/', 'dashboard', 'dashboard')) ->withMatchMode(MenuMatchMode::EQUALS), ); $menu->add( (new MenuItem('Промо', null, 'promo', 'promo')) ->setChildren([ new MenuItem('Промокоды', '/promo/promocodes', 'promocode', 'promocode'), ]), );
Tabs
use PhpSoftBox\Inertia\Page\Tabs; $tabs ->setActiveKey('profile') ->add('Профиль', 'profile', '/profile') ->add('Пароль', 'password', '/profile/password'); return $inertia->render('Profile/Show');
SSR (заготовка)
SSR опционален и выключен по умолчанию. Для интеграции нужен свой
рендерер, реализующий SsrRendererInterface.
use PhpSoftBox\Inertia\Ssr\SsrRendererInterface; final class MySsrRenderer implements SsrRendererInterface { public function render(ServerRequestInterface $request, InertiaPage $page): ?SsrResponse { // Вернуть head/body, либо null если SSR не нужен для этого запроса. } }
В конфиге Inertia:
return [ 'ssr' => [ 'enabled' => env('INERTIA_SSR', false), ], ];
Если SSR включён и доступен, view получает переменную $ssr:
['head' => string[], 'body' => string]. Дефолтный view в AppBackend
уже умеет вставлять эти данные.
Разделение SSR по хосту/пути
Решение остаётся за вашим SsrRendererInterface — можно включать SSR
только для публичного сайта и выключать для админки/кабинета.
public function render(ServerRequestInterface $request, InertiaPage $page): ?SsrResponse { $host = $request->getUri()->getHost(); $path = $request->getUri()->getPath(); if ($host === 'admin.example.local' || str_starts_with($path, '/cabinet')) { return null; // SSR не нужен. } return $this->renderFromNode($page); }