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

多语言Laravel项目路由与show函数报错问题求助

Laravel多语言项目路由与视图报错解决方案

我来帮你逐个排查并解决这两个问题:

问题1:访问projekt.test/en/cars/2/时抛出「Trying to get property 'marka' of non-object」

原因分析

  1. 控制器参数顺序不匹配路由:你的路由定义是{locale}/cars/{id},意味着请求参数的传递顺序是先locale再id,但你的show方法参数顺序是$carRepository, $id, $locale——这会导致$id被错误赋值为en,$locale被赋值为2,自然找不到对应的车辆记录,最终$carDetail为null。
  2. CarRepository缺少find方法:你在show方法中调用了$carRepository->find($id),但提供的仓库代码里并没有实现这个方法,直接调用会返回null。

解决方案

  • 调整控制器方法的参数顺序:把locale参数移到id前面:
public function show(CarRepository $carRepository, $locale, $id){
    $carDetail = $carRepository->find($id);
    App::setLocale($locale);
    session()->put('locale', $locale);
    return view('cars.show', ["carDetail" => $carDetail]);
}
  • 在CarRepository中添加find方法:
public function find($id){
    // 如果你只想返回状态为online的车辆,用这个:
    return $this->model->where('status', 'online')->find($id);
    // 如果不需要过滤状态,直接用:
    // return $this->model->find($id);
}
  • 视图层增加空值防护(可选但推荐):避免后续因数据缺失再次报错:
<div class="card-header"> {{ $carDetail?->marka ?? '无品牌信息' }} </div>

问题2:访问projekt.test/pl/categories/3时抛出「Missing required parameters for [Route: carsCategories]」

原因分析

  1. 访问路径不符合路由规则:你的carCategories路由定义的是{locale}/cars/categories/{id},但你访问的路径是/pl/categories/3,缺少了cars前缀,本身就不匹配路由。
  2. 模板生成路由时参数缺失:报错关联到template.blade.php,说明你在模板中调用route('carCategories')时,没有传入locale和id这两个必填参数。

解决方案

  • 使用正确的访问路径:正确的访问地址应该是projekt.test/pl/cars/categories/3
  • 在模板中正确生成路由链接:确保传入所有必填参数,比如:
{{ route('carCategories', ['locale' => app()->getLocale(), 'id' => $category->id]) }}
  • 校验路由名称一致性:确认模板中使用的路由名称是carCategories(和路由定义的name('carCategories')完全一致,避免拼写错误)

额外优化建议

  • 你的SetLocale中间件应该已经处理了locale的设置逻辑,控制器里重复调用App::setLocale($locale)和session()->put('locale', $locale)可以去掉,减少冗余代码。
  • 路由定义中末尾的斜杠可以省略,Laravel会自动处理,比如把Route::get('cars/', ...)改成Route::get('cars', ...),更符合规范。

内容的提问来源于stack exchange,提问作者Łukasz Jaguszewski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:10