如何在 laravel php 中创建动态面包屑?

问题描述 投票:0回答:1

我正在开发一个项目,我需要使用

breadcrumbs
laravel-breadcrumbs

Route::get('/', function () {

    return view('welcome');
});

上面的代码是我的主要/回家路线

Route::get('/collections/{id}', [SousCategorieController::class, 'show'])->name('collections');

这是我的

Collections
路线代码以上

我想创建一个面包屑逻辑,如下所示:

home/Collections/1
,而不是
ID
,我想要集合的名称,

首页/收藏/收藏名称

**这是我的控制器代码:**

public function show(Sous_categorie $sous_categorie, $id)
{

    //dd($id);
    $count = DB::table('produits')->select('produits.sous_categorie_id')->where('produits.sous_categorie_id', '=', $id)->get();
    //return response()->json($count);
    $s_marque = DB::table('produits')
        ->select('marque')
        ->join('sous_categories', 'sous_categories.id', '=', 'produits.sous_categorie_id')
        ->whereIn('sous_categories.categorie_id', [$id])->get();
    //dd($s_marque);
    $f_categorie = DB::table('sous_categories')->select('*')->where('categorie_id', '=', $id)->get();
    $s_produits = DB::table('produits')
        ->select('produits.*', 'sous_categories.categorie_id as laravel_through_key')
        ->join('sous_categories', 'sous_categories.id', '=', 'produits.sous_categorie_id')
        ->where('sous_categories.categorie_id', [$id])
        ->paginate(8)->withQueryString();
    //dd($f_categorie);
    $product = Produit::orderBy('id', 'DESC')->paginate(12)->withQueryString();
    $prods = Produit::with('souscategories')->orderBy('id', 'DESC')->paginate(8)->withQueryString();
    $categories = Categorie::all();
    $sous_categorie = DB::table('sous_categories')->select('*')->where('categorie_id', 'like', '%' . $id . '%')->get();
    //$s_produits = DB::table('produits')->select('*')->where('sous_categorie_id','like','%'.$id.'%')->get();
    //return response()->json($s_produits);

    return view('collections.components', compact('sous_categorie', 'id', 'f_categorie', 'categories', 'prods', 'product', 's_produits', 's_marque', 'count'));
}

我尝试在基于以下代码中的包文档创建的

breadcrumbs.php
文件上创建面包屑:

<?php // routes/breadcrumbs.php

// Note: Laravel will automatically resolve `Breadcrumbs::` without
// this import. This is nice for IDE syntax and refactoring.
use Diglactic\Breadcrumbs\Breadcrumbs;

// This import is also not required, and you could replace `BreadcrumbTrail $trail`
//  with `$trail`. This is nice for IDE type checking and completion.
use Diglactic\Breadcrumbs\Generator as BreadcrumbTrail;

// Home
Breadcrumbs::for('home', function (BreadcrumbTrail $trail) {
    $trail->push('Home', route('/dashboard'));
});

// Home > Blog
Breadcrumbs::for('collections', function ($trail) {
    $trail->push('Collections', route('collections'));
});

并将其渲染在秃头视图上,如下所示:

{!! Breadcrumbs::render() !!}
,它会返回错误:

`缺少 [路由:集合] [URI:集合/{id}] [缺少参数:id] 的必需参数。

请!帮助

php laravel breadcrumbs
1个回答
0
投票

您可以使用 slug、名称或任何您想要的内容来代替 id。 检查您的数据库,如果您的集合表有例如名称行,您可以在路线中设置它。 那么你应该改变你的路线和控制器。我们假设您的数据库中有集合名称。 控制器应该是这样的:

 public function show(Sous_categorie $sous_categorie, $name)
{    
    $count = DB::table('produits')->select('produits.sous_categorie_id')->where('produits.sous_categorie_id', '=', $name)->get();
    
    $s_marque = DB::table('produits')
        ->select('marque')
        ->join('sous_categories', 'sous_categories.id', '=', 'produits.sous_categorie_id')
        ->whereIn('sous_categories.categorie_id', [$name])->get();
   
    $f_categorie = DB::table('sous_categories')->select('*')->where('categorie_id', '=', $name)->get();
    $s_produits = DB::table('produits')
        ->select('produits.*', 'sous_categories.categorie_id as laravel_through_key')
        ->join('sous_categories', 'sous_categories.id', '=', 'produits.sous_categorie_id')
        ->where('sous_categories.categorie_id', [$name])
        ->paginate(8)->withQueryString();
   
    $product = Produit::orderBy('id', 'DESC')->paginate(12)->withQueryString();
    $prods = Produit::with('souscategories')->orderBy('id', 'DESC')->paginate(8)->withQueryString();
    $categories = Categorie::all();
    $sous_categorie = DB::table('sous_categories')->select('*')->where('categorie_id', 'like', '%' . $name . '%')->get();
    
    return view('collections.components', compact('sous_categorie', 'name', 'f_categorie', 'categories', 'prods', 'product', 's_produits', 's_marque', 'count'));
}

路线应该是

Route::get('/collections/{name}', [SousCategorieController::class, 'show'])->name('collections');
© www.soinside.com 2019 - 2024. All rights reserved.