【问题标题】:Using slugs in laravel 5?在 laravel 5 中使用蛞蝓?
【发布时间】:2015-08-27 13:11:16
【问题描述】:

我已经在我的应用程序上进行了 eloquent-sluggable 的工作。蛞蝓保存得很好。 Buuuut...如何使用它来创建漂亮的 url?

如果可能,我想在我的网址中使用它们而不是 ID 号。

【问题讨论】:

  • 基本上一切都归结为您的路线。您仍然需要创建指定 slug 的路线,例如 Route::get('/home/{slug}' , function(){ });

标签: laravel-5 slug


【解决方案1】:

对于未来的读者,从 Laravel 8.0 开始,您可以在路径中指定一列

Route::get('/users/{user:slug}', function (User $user) {
    return $user->bio;
});

【讨论】:

    【解决方案2】:

    从 Laravel 5.2 开始,如果你使用路由模型绑定,那么你可以像往常一样让你的路由包含对象标识符(隐式绑定)。例如:

    routes/web.php (Laravel 5.3) 或 app/Http/routes.php (Laravel 5.2) 中:

    Route::get('categories/{category}', 'CategoryController@show');
    

    在你的CategoryController

    show (Category $category) {
        //
    }
    

    您唯一需要做的就是告诉 Laravel 从不同的列中读取标识符,例如 slug 列,方法是在您的 eloquent 模型中自定义键名:

    /**
     * Get the route key for the model.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }
    

    现在,您可以引用您的 url,它需要带有 slug 标识符的对象标识符,而不是 id 一个。

    Laravel 5.3 (or 5.2) Route Model Biding

    【讨论】:

      【解决方案3】:

      是的,您可以在您的route 中使用slug 并生成url,例如,如果您声明这样的路由:

      Route::get('users/{username}', 'UserController@profile')->where('profile', '[a-z]+');
      

      然后在你的控制器中,你可以像这样声明方法:

      public function profile($username)
      {
          $user = User::where('username', $username)->first();
      }
      

      username 是你的 slug,它必须是一个字符串,因为路由声明中的 where()...。如果传递了integer,则无法找到route,并抛出404 错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 2015-10-23
        • 2019-08-15
        • 2014-05-17
        • 2020-08-17
        • 1970-01-01
        相关资源
        最近更新 更多