Using slugs in laravel 5?

前端 未结 2 1299
别跟我提以往
别跟我提以往 2020-12-09 22:40

I have made eloquent-sluggable work on my app. Slugs are saved just fine. Buuuut... How do I use it to create a pretty url?

If possible, I would like to use them in

相关标签:
2条回答
  • 2020-12-09 23:07

    Yes, you can use slug in your route and generated url, for example, if you declare a route something like this:

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

    Then in your controller, you may declare the method like this:

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

    The username is your slug here and it must be a string because of where()... in the route declaration. If an integer is passed then route couldn't be found and 404 error will be thrown.

    0 讨论(0)
  • 2020-12-09 23:17

    As of Laravel 5.2, if you use Route Model Binding, then you can make your routes that contain the object identifier as usual (Implicit Binding). For example:

    In routes/web.php (Laravel 5.3) or app/Http/routes.php (Laravel 5.2):

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

    In your CategoryController:

    show (Category $category) {
        //
    }
    

    The only thing you need to do is telling Laravel to read the identifier from a different column like, for example, slug column, by customizing the key name in your eloquent model:

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

    Now, you can refer your url's that requires the object identifier with the slug identifier instead the id one.

    See Laravel 5.3 (or 5.2) Route Model Biding

    0 讨论(0)
提交回复
热议问题