在laravel 5中使用slu ??

时间:2015-06-11 17:31:47

标签: laravel-5 slug

我在我的应用程序上做了雄辩的工作。 S g保存得很好。 Buuuut ...我如何用它来创建一个漂亮的网址?

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

3 个答案:

答案 0 :(得分:8)

是的,您可以在slug中使用route并生成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错误。

答案 1 :(得分:4)

从Laravel 5.2开始,如果使用Route Model Binding,则可以像往常一样制作包含对象标识符的路径(隐式绑定)。例如:

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列:

/**
 * 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

答案 2 :(得分:2)

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

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