【问题标题】:Displaying category url with only name laravel显示只有名称 laravel 的类别 url
【发布时间】:2026-01-22 02:40:02
【问题描述】:

我正在尝试使用 name 而不是 id 显示类别 url,例如。 http://567.0.0.1:23/category/Women。在类别表中,有Idname 列,在产品表中也有category_id 列。到目前为止,url 显示的是空类别,我怎样才能让它显示带有名称的 url?

路线

 Route::get('/category/{name}', 'HomeController@showCates'); 

参考

 `<a href="http://567.0.0.1:23/category/Women"></a>`

控制器

    public function showCates($id)
    {
    $category_products=product::where('category_id',$id)->get();
    $id_ =$id;
    return     view('front.category_list_pro',compact('category_products', 'id_'));
    }

【问题讨论】:

  • 我不明白你的问题是什么
  • 你应该有Category和Product之间的关系,以防你能显示出来。
  • 目前的 url 是这样的 href="http://567.0.0.1:23/category/21 这是女性类别,我希望 url 是 href="http://567.0.0.1:23/category/Women 所以而不是 id 我希望它被替换为类别名称@GiacomoM
  • 你创建的url,所以我还是不明白你的问题是什么
  • 我试图让它工作,所以我用名称替换了 id women -> href="http://567.0.0.1:23/category/Women 这个 url 显示没有产品的空类别但是如果我像这样更改它 href="http://567.0.0.1:23/category/21 它显示女性类别中的所有产品。 @GiacomoM

标签: php laravel laravel-5


【解决方案1】:

如果您希望 URL 显示类别名称而不是 ID,您可以为名为 slug 的类别表创建一个新的唯一列。

创建类别后,您可以通过 Laravel mutators 自动为其分配一个 slug 字段:

// inside Category model
public function setNameAttribute($name)
{
    $this->attributes['slug'] = str_slug($name);
    $this->attributes['name'] = $name;
}

然后你可以像这样访问路由:

Route::get('/category/{slug}', [
    'uses' => 'CategoryController@show',
    'as' => 'category.show'
]);

在刀片模板中,您可以创建如下 URL:

{{ url('/category', ['slug' => $category->slug]) }}

这将导致例如http://567.0.0.1:23/category/women

内部控制器:

public function show($slug)
{
    $category = Category::where('slug', '=', $slug)->first();

    return view('category.show', compact('category'));
}

【讨论】:

    最近更新 更多