咨询Laravel Jetstream Inertia中$page.props.user的传递位置
Laravel 9+Inertia+Vue3+Jetstream中$page.props.user的传递位置
环境为Laravel 9、Inertia、Vue 3、Jetstream,在AppLayout组件中通过
$page.props.user调用用户信息。请问该用户信息在Laravel的哪个位置进行传递?已查看HandleInertiaRequests,但未找到相关内容。
这个用户信息是由Jetstream的Inertia服务提供者自动注入的,具体位置在vendor/laravel/jetstream/src/Providers/InertiaServiceProvider.php文件中。
Jetstream的这个服务提供者会在boot方法里注册一个Inertia共享数据的回调,将认证用户信息通过Inertia::share()方法传递给前端,核心代码示例如下:
public function boot() { $this->configurePermissions(); Inertia::share([ 'auth' => function () { return [ 'user' => Auth::user() ? [ 'id' => Auth::user()->id, 'name' => Auth::user()->name, 'email' => Auth::user()->email, // 其他默认携带的用户字段 ] : null, ]; }, // 其他共享数据 ]); }
你在前端看到的$page.props.user,实际是从共享的auth对象中获取的——Jetstream生成的前端AppLayout组件会通过usePage()钩子提取auth.user,所以模板里能直接调用$page.props.user。
如果需要自定义用户数据的内容,你可以在项目自己的HandleInertiaRequests中间件的share方法里覆盖或补充信息,示例代码:
// app/Http/Middleware/HandleInertiaRequests.php public function share(Request $request) { return array_merge(parent::share($request), [ 'auth.user' => function () { return Auth::user() ? Auth::user()->only('id', 'name', 'email', 'your_custom_field') : null; }, ]); }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

