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

