在 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 文件导入导出功能