Laravel cviebrock/eloquent-sluggable 将 @ 作为前缀或在路由中过滤它
Posted
技术标签:
【中文标题】Laravel cviebrock/eloquent-sluggable 将 @ 作为前缀或在路由中过滤它【英文标题】:Laravel cviebrock/eloquent-sluggable put @ as prefix or filter it in route 【发布时间】:2020-11-13 19:33:25 【问题描述】:Laravel 7.0 版本,我使用的是cviebrock/eloquent-sluggable 包。
我想要的是把@
作为用户名的前缀。
我在 User 模型中加入了 Sluggable trait 并像这样设置。
public function sluggable()
return [
'username' => [
'source' => 'name',
'separator' => '',
'onUpdate' => true
]
];
现在我想要的是https://mywebsite.com/@username
url 显示用户个人资料。
我认为我们可以将 @
作为前缀放在 sluggable 包中,或者我们可以在 laravel 路由中检测它。
谁能给我更好的建议?
谢谢
【问题讨论】:
【参考方案1】:我建议您尝试 eloquent-sluggable 的 method
并在那里生成前缀 slug(即以 @username
格式),而不是将 @
作为路由的一部分。
此建议背后的基本原理是,当您在 slug 本身而不是路由中生成和存储 @
时(据我了解,您在质疑哪个更好)您可以减轻使用 @
符号引用用户的任务因为您只需要查询匹配的条目,而无需关心来回进行转换(例如,在生成链接时为username
加上@
前缀)。
更新:添加了method
的基本示例,以@
为用户名前缀
这是一个基本示例,展示了如何为用户添加前缀@
。确保添加自己处理的空格,以防用户名可能包含这些。
return [
'username' => [
...,
'method' => function ($username, $separator)
// example from docs: strtolower(preg_replace('/[^a-z]+/i', $separator, $string));
return "@$username";
,
]
];
【讨论】:
你能推荐一些代码来使用method
吗?谢谢
@lovecoding-laravel 我更新了答案以包含一个小例子。我认为您可以继续改进它以满足您的要求。【参考方案2】:
我想出了更好的解决方案。
我可以很容易地在 laravel 路由中添加@。
Route::get('/@username', 'HomeController@user')->name('user.index');
我们可以在没有@的情况下保存用户名,并将@作为前缀放在laravel路由中。
【讨论】:
以上是关于Laravel cviebrock/eloquent-sluggable 将 @ 作为前缀或在路由中过滤它的主要内容,如果未能解决你的问题,请参考以下文章