如何与laravel进行动态链接?

时间:2018-01-09 16:37:09

标签: php laravel-5

考虑主要类别子类别心态。我希望在点击链接时拥有以下内容。

我能做到:www.localhost.com/category /

我想这样做:www.localhost.com/category/vehicle

衍生物:www.localhost.com/category/vehicle/bmw               www.localhost.com/category/vehicle/bmw/bmm-x7-series

Route::get('/category/{id}', 'CategoryController@index')->name('category.index');
          `

我的路线如下:

Route::get('/category/{slug}', 'CategoryController@index')->where('slug' , '[\w\d\-\_]+');

我创建了一个名为CategoryController的控件

class CategoryController extends Controller
{
  public function index($slug)
  {
    $category = Category::where('slug' , $slug)->first();
    return view('category.show' , compact('category'));
  }

我的观看内容(category.show.blade.php)

{{$category->slug}}
          <a href="{{ url('/category/' . $category->slug) }}" class="uhover">life is good. {{url($category->slug)}}</a>

1 个答案:

答案 0 :(得分:0)

如果您想在网址中提供车辆的类别/品牌而不是ID,则需要从路线中移除/{id}并将其替换为/{slug}

所以你的路线可能会是这样的:

Route::get('/category/{slug}', 'CategoryController@index')->name('category.index');

您必须将方法更改为:

// Show Method
public function show($slug){
    $category = Category::where('slug', $slug)->first();
    return view('game.show', compact('category'));
}

理想情况下,要确保slug是唯一的,您可以将其存储在数据库中。您可以利用Laravel的slug helper来执行此操作,如果slug已经存在,只需附加一个后缀以使其唯一。

您可以使用生成slug模型:

class Item extends Model
{
    public static function boot()
    {
        parent::boot();

        static::saving(function ($model) {
            $model->slug = str_slug($model->name);
        });
    }
}

如果你想使用路由模型绑定,那么你需要告诉Eloquent要使用的列应该是你的slug列而不是

public function getRouteKeyName()
{
    return 'slug';
}