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

Laravel报错‘Trying to get property of non-object’问题排查求助

问题分析与解决方案

嘿,这个问题我之前踩过一模一样的坑,典型的数组与对象访问语法混淆导致的错误!

错误根源

你在控制器里把$args定义成了数组:

$args = array(); 
$args['name'] = "Robin"; 
$args['email'] = "asdasd@asdasd.net";

但在视图里却误用了对象的属性访问语法(->):

{{ $args->name }} {{ $args->email }}

PHP抛出“Trying to get property of non-object”错误,核心原因就是$args本质是数组,不是对象,自然不能用对象的方式访问元素。

至于循环部分能正常运行,是因为你用了正确的数组访问语法$args['activity'],和控制器里的赋值逻辑完全匹配,所以能正确拿到数据。

两种解决方案

方案1:保持数组结构,修改视图访问方式

控制器代码不用动,只需要把视图里的对象访问改成数组下标访问即可:

{{ $args['name'] }} {{ $args['email'] }} 
@if (isset($args['activity'])) 
    @foreach ($args['activity'] as $act) 
        {{$act->job_name}} 
    @endforeach 
@endif

方案2:改用对象传递(更符合Laravel常用写法)

把控制器里的$args改成对象,这样视图里的->访问就合法了:

// 控制器代码修改
$args = new \stdClass();
$args->name = "Robin";
$args->email = "asdasd@asdasd.net";
$clientpayments = Payments::getPaymentByClient($id);
$args->activity = $clientpayments;
return view('clients.show',["args" => $args]);

或者更推荐Laravel的简洁写法,直接拆分变量用compact传递,避免打包成单个数组/对象,代码可读性更高:

// 控制器代码优化
$name = "Robin";
$email = "asdasd@asdasd.net";
$activity = Payments::getPaymentByClient($id);
return view('clients.show', compact('name', 'email', 'activity'));

对应的视图代码也更清爽:

{{ $name }} {{ $email }} 
@if (isset($activity)) 
    @foreach ($activity as $act) 
        {{$act->job_name}} 
    @endforeach 
@endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:45