2010-09-19 55 views
0

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

回答

5

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

更好地执行诸如www.example.com/users/username之类的操作。 (例如www.example.com/users/ssokolow)这就是所有理智的网站所做的。事实上,在相关说明中,Mozilla只是重新设计了插件集合系统,以便集合名称在用户名下以命名空间解决类似问题。

无论如何,无论您决定如何,CakePHP 1.3手册中的Section 3.4.5: Routes Configuration中都有关于自定义URL映射的说明,而与您的控制器设计无关。

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

您仍然必须手动维护一个被禁止的用户名列表,因为他们的个人资料URL将被站点全局内容覆盖(例如,登录),您仍然必须小心对于恶意用户可能能够利用欺骗其他用户进入某些事件的情况,但它会起作用。

0

您可以使用路径作为路径文件末尾的延伸,但这不是可取的 - ssokolow已经解释了原因。我使用了一个非常类似于CMS的东西,但是对于页面而不是用户而言,唯一性由系统维护。

如果URL必须像www.example.com/username而不是www.example.com/users/username那样读取,那么我会考虑通过apache重写url来完成。如果用户名与网页名称一致,这可能仍会给您带来问题,并且可能会让访问者不提及搜索引擎。

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

0

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

实现此目标的最佳方式是使用路由,但不是手动 - 数据库驱动的路由。马克故事的话题一个伟大的文章,我已经使用非常方便和成功的这种做法非常大的网站:

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

我所做的唯一的变化是我保持所谓的“路线”表并有相应的路线模型。路线表中只有id/name/value字段。这个名字是很好的URL(在你的情况下是“somegreatuser”),而这个值是系统URL(例如users/view/123)。

您只需要维护一个保留的用户名黑名单,这很容易使用路由模型中的验证完成。

相关问题