Laravel cviebrock/eloquent-sluggable 将@作为前缀或在路由中过滤
Laravel cviebrock/eloquent-sluggable put @ as prefix or filter it in route
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 路由中检测到它。
谁能建议我更好的方法?
谢谢
我建议您尝试 eloquent-sluggable 的 method
并在那里生成带前缀的 slug(即 @username
格式),而不是将 @
保留为路线的一部分。
这个建议背后的基本原理是,当您在 slug 本身而不是路由中生成和存储 @
时(据我了解,您是在质疑哪个更好),您可以轻松地引用用户@
符号,因为您只需要查询匹配的条目,而无需关心进行转换(例如,在生成 link 时为 username
加上 @
前缀) 来回.
更新:添加了 method
的基本示例,用户名前缀为 @
这是一个基本示例,展示了如何为用户添加前缀 @
。确保添加自己处理的空格,以防用户名可能包含这些内容。
return [
'username' => [
...,
'method' => function ($username, $separator) {
// example from docs: strtolower(preg_replace('/[^a-z]+/i', $separator, $string));
return "@{$username}";
},
]
];
我找到了更好的解决方案。
我可以轻松地在 laravel 路由中添加 @。
Route::get('/@{username}', 'HomeController@user')->name('user.index');
我们可以在不带@的情况下保存用户名,并将@作为前缀放在laravel路由中。
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 路由中检测到它。
谁能建议我更好的方法?
谢谢
我建议您尝试 eloquent-sluggable 的 method
并在那里生成带前缀的 slug(即 @username
格式),而不是将 @
保留为路线的一部分。
这个建议背后的基本原理是,当您在 slug 本身而不是路由中生成和存储 @
时(据我了解,您是在质疑哪个更好),您可以轻松地引用用户@
符号,因为您只需要查询匹配的条目,而无需关心进行转换(例如,在生成 link 时为 username
加上 @
前缀) 来回.
更新:添加了 method
的基本示例,用户名前缀为 @
这是一个基本示例,展示了如何为用户添加前缀 @
。确保添加自己处理的空格,以防用户名可能包含这些内容。
return [
'username' => [
...,
'method' => function ($username, $separator) {
// example from docs: strtolower(preg_replace('/[^a-z]+/i', $separator, $string));
return "@{$username}";
},
]
];
我找到了更好的解决方案。
我可以轻松地在 laravel 路由中添加 @。
Route::get('/@{username}', 'HomeController@user')->name('user.index');
我们可以在不带@的情况下保存用户名,并将@作为前缀放在laravel路由中。