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

Laravel 9点击编辑页侧边栏菜单出现slug非对象错误

问题解决方案

1. 核心问题定位

  • URL异常:点击侧边栏菜单时出现/laporan-edit/dashboard,是因为侧边栏链接使用了相对路径,导致在/laporan-edit/{slug}页面下会拼接当前路径。
  • Trying to get property 'slug' of non-object错误:错误URL匹配到了laporan-edit/{slug}路由,而dashboard并非有效slug,控制器查询不到对应模型实例,后续访问$laporan->slug报错。
  • 菜单跳转异常:之前添加的判断逻辑存在错误,导致错误重定向。

2. 分步解决

(1)修复侧边栏链接路径

将侧边栏的相对路径改为绝对路由/URL,避免路径拼接错误:

<!-- 错误写法(相对路径) -->
<a href="dashboard">Dashboard</a>

<!-- 正确写法二选一 -->
<a href="{{ route('dashboard') }}">Dashboard</a>
<a href="{{ url('/dashboard') }}">Dashboard</a>

(2)解决模型属性报错

在LaporanController的edit方法中,确保查询到有效模型实例,无匹配时返回404:

public function edit($slug)
{
    // 方法一:直接抛出404
    $laporan = Laporan::where('slug', $slug)->firstOrFail();
    
    // 方法二:手动判断
    // $laporan = Laporan::where('slug', $slug)->first();
    // if (!$laporan) {
    //     abort(404);
    // }

    return view('laporan.edit', compact('laporan'));
}

(3)修复编辑表单无法提交问题

检查表单配置是否符合Laravel规范:

  • 确保表单使用PUT/PATCH方法,携带CSRF令牌:
<form action="{{ route('laporan.update', $laporan->slug) }}" method="POST">
    @csrf
    @method('PUT')
    <!-- 表单字段 -->
</form>
  • 确认路由配置正确:
Route::put('/laporan-edit/{slug}', [LaporanController::class, 'update'])->name('laporan.update');

(4)解决菜单跳转异常问题

  • 检查路由顺序:固定路径路由(如/dashboard)要放在带参数路由(如/laporan-edit/{slug})前面,避免参数路由错误匹配:
// 先定义固定路径路由
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
// 再定义带参数的路由
Route::get('/laporan-edit/{slug}', [LaporanController::class, 'edit'])->name('laporan.edit');
  • 排查全局中间件或控制器构造函数中的错误重定向逻辑,移除错误的强制跳转代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:55:20