在 laravel 5 中使用蛞蝓?

Posted

技术标签:

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

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

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

【问题讨论】:

基本上一切都归结为您的路线。您仍然需要创建指定 slug 的路线,例如 Route::get('/home/slug' , function() ); 【参考方案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 错误。

【讨论】:

以上是关于在 laravel 5 中使用蛞蝓?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.7 和 Laravel Collective 中使用动作 [重复]

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

laravel 5.4 在邮件中嵌入图像

如何在 laravel 5 中使用分页?

如何在 Laravel 5.2 中使用资源声明路由