CakePHP中的自定义控制器名称

时间:2010-09-19 03:12:43

标签: php cakephp cakephp-1.3

我正在开发cakephp中的应用程序,我必须为网站中的每个用户提供一个用户页面,例如www.example.com/username,每个用户都会更改用户名,当访问者访问此网址时,他会获得详细信息具有该特定用户名的用户,但在蛋糕用户名中尝试获取具有该名称的控制器,我该怎么做?

3 个答案:

答案 0 :(得分:5)

我的第一反应是说“不要那样做”。如果您决定在将来的某个时间点添加促销页面会发生什么,但您已经有一个名为“促销”的用户,或者您想要添加一个论坛系统,但您已经拥有了名为“非常好的用户”论坛“和”董事会“?

最好做一些像www.example.com/users/username这样的事情。 (例如www.example.com/users/ssokolow)这就是所有理智的网站都是这样做的。实际上,在相关的说明中,Mozilla刚刚重新设计了插件集合系统,以便集合名称在用户名下命名,以解决类似的问题。

无论如何,无论你决定什么,独立于控制器设计自定义URL映射的说明都在CakePHP 1.3手册的Section 3.4.5: Routes Configuration中。

您需要设置优先顺序,以便CakePHP首先尝试其他所有内容(如登录页面和接受用户数据的表单的提交处理程序),然后在放弃之前尝试将您的用户名映射作为最后一件事。返回404。

您仍然需要手动维护被禁止的用户名列表,因为他们的个人资料网址会被网站全局内容覆盖(例如登录),您仍然需要留意恶意用户可能会遇到的情况能够利用来欺骗其他用户,但它会起作用。

答案 1 :(得分:0)

你可以使用路由作为路径文件末尾的一个穿透,但不建议 - ssokolow解释了原因。我使用了一些非常类似于CMS的东西,但对于页面而不是用户而言,系统维护了唯一性。

如果网址必须是www.example.com/username而不是www.example.com/users/username,那么我会通过apache重写网址来实现。如果用户名与页面名称一致,这可能仍然会给您带来问题,并且可能会让访问者感到困惑,更不用说搜索引擎了。

保持简单 - 不要让自己头疼。

答案 2 :(得分:0)

这是一个很好的功能,用户可以通过这种方式访问​​他们的帐户,与其他答案相反,我认为这不是一件令人头疼或不受欢迎的事情。

实现这一目标的最佳方法是使用路线,而不是手动 - 数据库驱动的路线。 Mark Story有一篇关于这个主题的精彩文章,我在非常大的网站上非常轻松地使用了这种方法:

http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

我做的唯一改变是我维护了一个名为“routes”的表,并且有一个相应的Route模型。 routes表只有id / name / value字段。名称是很好的URL(在您的情况下是“somegreatuser”),而值是系统URL(例如users / view / 123)。

您需要做的就是维护一个保留用户名的黑名单,这可以通过Route模型中的验证轻松完成。