Для передачи данных в главный шаблон (root template) при использовании Inertia в Laravel, вам понадобится создать Middleware и зарегистрировать его в глобальном HTTP-ядре.
Во-первых, создайте новый Middleware с помощью команды Artisan:
php artisan make:middleware ShareInertiaData
Откройте файл ShareInertiaData.php, который находится в директории app/Http/Middleware, и добавьте следующий код:
<?php namespace AppHttpMiddleware; use Closure; use InertiaInertia; class ShareInertiaData { public function handle($request, Closure $next) { Inertia::share([ // Ваши данные, которые вы хотите передать в главный шаблон ]); return $next($request); } }
После этого вам нужно зарегистрировать созданный Middleware в классе Kernel приложения. Откройте файл app/Http/Kernel.php и добавьте 'shareInertiaData' в массив $middlewareGroups:
protected $middlewareGroups = [ 'web' => [ // Другие Middleware AppHttpMiddlewareShareInertiaData::class, ], ];
После внесения изменений рекомендуется очистить кэш конфигурации, используя команду:
php artisan config:cache
Теперь вы можете передавать данные из любого контроллера в главный шаблон. Откройте контроллер, из которого вы хотите передать данные, и используйте метод inertia() для возврата данных вместе с представлением:
public function index() { $data = [ 'user' => Auth::user(), 'notifications' => // Получите уведомления пользователя или любые другие данные, ]; return inertia('Index', $data); }
В главном шаблоне (который обычно называется app.blade.php или layout.blade.php) вы можете получить доступ к переданным данным, используя объект $page:
<!DOCTYPE html> <html> <head> <!-- Заголовок, мета-теги, стили, скрипты и т.д. --> </head> <body> <div id="app" data-page="{{ json_encode($page) }}"></div> <script src="{{ mix('/js/app.js') }}"></script> </body> </html>
Теперь данные, переданные из вашего контроллера, будут доступны в JavaScript-части вашего приложения через глобальную переменную window
.
Надеюсь, это помогло! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.