假设我有一个网站,其中包含用户的唯一网址,例如的 abc.com/user1 即可。 我希望用户能够创建自己的用户URL,例如abc.com/user1到abc.com/foo
这里的问题是我的网站有静态页面,例如:关于,帮助,联系,下载。
在个人资料页面上,当用户更改其网址时,我会将此验证程序应用于其新的个人资料网址:
'username' => 'required|alpha_dash|max:20|min:3|unique:users'
在这种情况下,如果用户选择他们的新个人资料网址与我的应用程序的路径相同(帮助,关于,下载...),他们的网址如下所示: abc.com/about ,这很麻烦。 当然,Validator将返回 true ,因为该名称有效:min = 3,max = 20且“users”表中的唯一名称( “用户”表当然不包含任何控件。
要解决这个问题,我将一些Route的名称添加到“users”表(about,contact,download ...),这样他们就不能像abc.com/about那样制作他们的个人资料网址, 但这不是一个好主意,因为我将来可能会增加更多的路线。
PS:我不喜欢 abc.com/profile/user1 这样的网址,必须 abc.com/user1 。 请帮我解决这个问题。
答案 0 :(得分:1)
您可以使用Route::getRoutes()
获取应用程序中的所有已注册路线
$routes = Route::getRoutes();
foreach($routes as $route){
echo $route->getUri(); // getUri will return the url pattern it matches
}
现在您可以使用它来检查您的路线中是否没有显示用户名。
但是要小心!如果要在应用程序运行时添加路由,则每次没有用户选择了您想要选择的名称时都要检查。
答案 1 :(得分:1)
以下是一些可能性
您可以先调用静态路由,然后最后执行像lukasgeiter建议的操作,或者您甚至可以检查控制器并首先浏览静态页面。这里的问题是用户可以创建用户(例如" about")但是当他们调用该页面时,他们会看到about页面,即使他们已经正确创建了用户名,可能会造成混乱。
另一种方法是为这些用户名创建一个黑名单,以便人们甚至无法注册这些类型的用户名(这与您预先创建这些用户名的解决方案类似,但这种方式将是有点清洁,更容易扩展)。使用此功能,一旦您想将其用作静态页面,您将始终遇到使用用户名的麻烦。例如。当你想扩展到另一个国家时。
E.g。你可以创建一个较低级别的静态页面,例如abc.com/static/about,这样就不会发生冲突。
这就是我的方式,因为从技术上讲,其他方式对我来说风险太大了。所以我选择了' @'为我的用户签名。所以abc.com/@ThisIsMe是我目前的解决方案。它适用于不同的语言(与abc.com/profile/thisisme相反,只适用于语言,其中配置文件是正确的术语)
我认为Flickr从flickr.com/username转到flickr.com/photos/username。 Google+并不能让您做出决定,但会提出建议(并添加+)。 Twitter和Facebook让用户选择自己的,我认为他们有黑名单。 LinkedIn使用/ in /.