You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Inertia share中间件空值处理:未登录时如何设置darkMode默认值为false

问题根因

未登录状态下$request->user()会返回null,直接调用->dark_mode属性会触发「尝试读取非对象的属性」类报错。


适配不同环境的解决方法

1. PHP 8.0及以上版本(推荐)

使用PHP原生空安全运算符?->,当左侧值为null时会直接终止属性读取返回null,配合布尔转换后未登录场景默认返回false:

public function share(Request $request)
{
    return array_merge(parent::share($request), [
        'darkMode' => !!$request->user()?->dark_mode,
    ]);
}

如果需要兼容dark_mode字段本身可能为null的极端场景,可以再加空合并运算符兜底:

'darkMode' => !!($request->user()?->dark_mode ?? false),

2. PHP 7.x版本(Laravel项目通用)

Inertia通常搭配Laravel使用,可直接调用框架提供的optional()辅助函数实现同样的空值兼容效果:

public function share(Request $request)
{
    return array_merge(parent::share($request), [
        'darkMode' => !!optional($request->user())->dark_mode,
    ]);
}

内容的提问来源于stack exchange,提问作者ArcticMediaRyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:06:02