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 将 @ 作为前缀或在路由中过滤它的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:laravel 可翻译插件

win 怎么laravel命令

laravel 安装失败

laravel validator怎么验证整数

Laravel 图像规则验证不适用于 Laravel 8,但适用于 Laravel 7 |拉拉维尔 |图片 |验证

laravel和mongo怎么搭配使用