2

Laravel 7.0 版,我使用的是cviebrock/eloquent-sluggable 包。

我想要的是@作为用户名的前缀。

我在用户模型中包含了 Sluggable 特征并设置为这样。

public function sluggable()
{
    return [
        'username' => [
            'source' => 'name',
            'separator' => '',
            'onUpdate' => true
        ]
    ];
}

现在我想要的是https://mywebsite.com/@usernameurl 显示用户个人资料。

我认为我们可以将@其作为前缀放在 sluggable 包中,也可以在 laravel 路由中检测到它。

谁能建议我更好的方法?

谢谢

4

2 回答 2

2

我建议您尝试 eloquent-sluggablemethod并在那里生成前缀 slug(即@username格式),而不是@作为路线的一部分。

该建议背后的基本原理是,当您@在 slug 本身而不是路线中生成和存储时(据我了解,您在质疑哪个更好)您可以减轻使用@符号引用用户的任务,因为您只需要查询匹配的条目和您不需要关心来回进行转换(例如,在生成链接时添加前缀)username@

更新:添加了method以用户名为前缀的基本示例@

这是一个基本示例,展示了如何为用户添加前缀@。确保添加自己处理的空格,以防用户名可能包含这些空格。

  return [
    'username' => [
      ...,
      'method' => function ($username, $separator) {
        // example from docs: strtolower(preg_replace('/[^a-z]+/i', $separator, $string));
        return "@{$username}";
      },
    ]
  ];
于 2020-07-24T00:40:33.507 回答
0

我想出了更好的解决方案。

我可以很容易地在 laravel 路由中添加 @ 。

Route::get('/@{username}', 'HomeController@user')->name('user.index');

我们可以在没有 @ 的情况下保存用户名,并将 @ 作为前缀放在 laravel 路由中。

于 2020-08-13T12:25:54.243 回答