【问题标题】:Laravel unique user profile url like facebookLaravel 独特的用户个人资料网址,例如 facebook
【发布时间】:2015-02-13 23:03:20
【问题描述】:

假设我有一个为用户提供唯一 URL 的网站,例如abc.com/user1。 我希望用户能够创建自己的用户网址,例如 abc.com/user1 到 abc.com/foo

这里的问题是我的网站有静态页面,例如:关于、帮助、联系、下载。

在个人资料页面上,当用户更改他们的网址时,我将此验证器应用于他们的新个人资料网址:

'username'      => 'required|alpha_dash|max:20|min:3|unique:users'

在这种情况下,如果用户选择他们的新配置文件 url 与我的应用程序的路由相同(帮助、关于、下载...),他们的 URL 看起来像:abc.com/about,这很麻烦。 当然,验证器会返回 true,因为该名称是有效的:min=3, max=20 并且在 "users" 表中是唯一的( “users” 表当然不包含任何控件)。

为了解决这个问题,我将一些路由的名称添加到“用户”表(关于、联系人、下载...),因此他们无法将他们的个人资料 URL 设为 abc.com/about, 但这不是一个好主意,因为我将来可能会添加更多路线。

PS:我不喜欢像 abc.com/profile/user1 这样的 URL,必须是 abc.com/user1。 请帮我解决这个问题。

【问题讨论】:

    标签: laravel


    【解决方案1】:

    这里有一些可能性

    1。先调用静态页面路由

    您可以先调用静态路由,然后在最后执行 lukasgeiter 建议的统称,或者您甚至可以检查控制器并先浏览静态页面。这里的问题是用户可以创建用户(例如“about”),但是当他们调用该页面时,他们会看到 about 页面,即使他们已经正确创建了用户名,这可能会造成混乱。

    2。黑名单

    另一种方法是为这些用户名创建一个黑名单,这样人们甚至无法注册这些类型的用户名(这类似于您预先创建这些用户名的解决方案,但这种方式会更简洁一些并且更容易扩展)。使用它,一旦您想将其用作静态页面,您总是会遇到有人使用用户名的麻烦。例如。当您想扩展到另一个国家/地区时。

    3。低一级的静态页面

    例如您可以创建低一级的静态页面,例如 abc.com/static/about,这样就不会发生冲突。

    4。在用户名前添加字符

    我就是这样走的,因为从技术上讲,其他方式对我来说有点太冒险了。所以我为我的用户选择了“@”符号。所以 abc.com/@ThisIsMe 是我目前的解决方案。它适用于不同的语言(而不是 abc.com/profile/thisisme 仅适用于语言,其中 profile 是正确的术语)

    我认为 Flickr 从 flickr.com/username 变为 flickr.com/photos/username。 Google+ 并没有真正让您决定,而是提出建议(并添加 +)。 Twitter 和 Facebook 让用户自己选择,我假设他们有一个黑名单。 LinkedIn 使用 /in/。

    【讨论】:

    • 关于你在#1中提到的问题。我的回答完全是关于如何验证用户名,这样他们就不能创建一个作为路由存在的用户名。
    • 啊,好的。然后它更像是#1和#2的混合。在我的回答中,#1 只会在创建用户名之后检查,#2 会在创建用户名之前检查。
    【解决方案2】:

    您可以使用Route::getRoutes() 获取应用程序中所有已注册的路由

    $routes = Route::getRoutes();
    foreach($routes as $route){
        echo $route->getUri(); // getUri will return the url pattern it matches
    }
    

    现在您可以使用它来检查用户名是否未出现在您的路线中。

    但是要小心!如果您想在应用程序运行时添加路由,则每次都必须检查是否没有用户使用您想要选择的名称。

    【讨论】:

    • 所以用户 URL 的路由必须在其他路由之后,例如 about,help...?
    • 是的,因为它将是一条“包罗万象”的路由Route::get('{user}'),并且会匹配所有其他请求。所以你必须先定义所有其他路线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2013-04-29
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多