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
相关产品推荐
相关产品推荐

