Laravel中创建动态面包屑遇问题求助(使用laravel-breadcrumbs)
1. 给首页路由补充名称
修改routes/web.php中的首页路由,添加name属性,确保面包屑能正确关联父级:
Route::get('/', function () { return view('welcome'); })->name('home');
2. 修正面包屑配置文件(routes/breadcrumbs.php)
按照你需要的「首页/Collections/集合名称」结构配置:
use Diglactic\Breadcrumbs\Breadcrumbs; use Diglactic\Breadcrumbs\Generator as Trail; use App\Models\SousCategorie; // 首页面包屑 Breadcrumbs::for('home', function (Trail $trail) { $trail->push('首页', route('home')); }); // 集合详情页面包屑 Breadcrumbs::for('collections', function (Trail $trail, SousCategorie $sousCategorie) { $trail->parent('home'); $trail->push('Collections', '#'); // 若Collections有独立路由,替换为对应route()即可 $trail->push($sousCategorie->name, route('collections', $sousCategorie)); });
3. 优化控制器逻辑(可选:用路由模型绑定)
把控制器的show方法改为路由模型绑定,自动获取模型实例,避免手动查询:
namespace App\Http\Controllers; use App\Models\SousCategorie; class SousCategorieController extends Controller { public function show(SousCategorie $sousCategorie) { // 自动根据路由{id}查询对应模型,不存在则返回404 return view('collections.show', compact('sousCategorie')); } }
如果坚持手动查询,确保获取到模型实例并传给视图:
public function show($id) { $sousCategorie = SousCategorie::findOrFail($id); return view('collections.show', compact('sousCategorie')); }
4. 视图中正确渲染面包屑
在Blade视图里渲染时,必须传递模型实例给render()方法,否则会缺失id参数:
{!! Breadcrumbs::render('collections', $sousCategorie) !!}
报错原因说明
之前的错误是因为调用Breadcrumbs::render()时,没有传递collections面包屑所需的模型/参数,导致生成路由链接时无法填充{id}占位符。传递模型实例后,包会自动提取主键作为路由参数,同时可以直接调用模型的name属性显示集合名称。
内容的提问来源于stack exchange,提问作者Mohmed Blida
相关产品推荐
相关产品推荐

