添加Auth::user()->id时触发array_merge参数错误的求助
错误原因与解决方法
错误原因
- 控制器数据传递错误:
return view('emeterai', $data)中的$data不是关联数组,getPageData方法返回了对象(比如Eloquent模型实例)。Laravel的view函数底层会用array_merge合并视图数据,对象无法参与数组合并,因此触发array_merge(): Expected parameter 2 to be an array, object given错误。 - JavaScript逻辑存在风险:直接访问
Auth::user()->id时,若用户未登录,Auth::user()返回null,调用->id会抛出属性读取错误;同时原代码的登录判断逻辑写反,已登录用户会触发未登录提示。
解决方法
1. 修复控制器数据传递问题
确保传递给view的是关联数组。如果getPageData返回对象,将其转换为数组:
public function index() { $this->login(); $pageData = Auth::check() ? $this->getPageData(Auth::user()->id) : $this->getPageData(null); // 将对象转换为数组,确保传递给视图的是数组格式 $data = is_object($pageData) ? $pageData->toArray() : $pageData; return view('emeterai', $data); }
或者直接修改getPageData方法,让它始终返回关联数组。
2. 修复JavaScript中的用户判断逻辑
先验证用户是否登录,再读取用户ID,同时修正逻辑顺序:
var userId = {!! Auth::check() ? Auth::user()->id : 'null' !!}; if (userId) { if (tempCart > 0) { const pid = {!! json_encode($meterai->product_id) !!}; const baseUrl = window.location.origin; const url = `${baseUrl}/${pid}/${qty}`; console.log(url); } else { alert("anda belum menentukan kuantitas meterai"); } } else { alert("silahkan login terlebih dahulu untuk menambah keranjang"); }
内容的提问来源于stack exchange,提问作者Fathan Akram
相关产品推荐
相关产品推荐

