Using slugs in laravel 5?

孤者浪人 提交于 2019-11-28 09:29:16

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.

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!