我正在cakephp中开发一个应用程序,我必须为网站中的每个用户提供一个用户页面,例如www.example.com/username,当访问者来到时,用户名将会更改为每个用户这个网址,他获得用户使用该特定用户名的详细信息,但在蛋糕用户名尝试获得该名称的控制器,我怎么能做到这一点?CakePHP中的自定义控制器名称
回答
我的第一反应是说“不要那么做”。如果您决定在未来的某个时间点添加促销页面,但是您已经有名为“促销”的用户或者您想添加论坛系统,但您已经有不太好的用户名为“论坛“和”董事会“?
更好地执行诸如www.example.com/users/username之类的操作。 (例如www.example.com/users/ssokolow)这就是所有理智的网站所做的。事实上,在相关说明中,Mozilla只是重新设计了插件集合系统,以便集合名称在用户名下以命名空间解决类似问题。
无论如何,无论您决定如何,CakePHP 1.3手册中的Section 3.4.5: Routes Configuration中都有关于自定义URL映射的说明,而与您的控制器设计无关。
您需要设置优先顺序,以便CakePHP首先尝试其他所有内容(如登录页面和提交处理程序接受用户数据的表单),然后在放弃之前尝试将用户名映射作为最后一件事并返回404.
您仍然必须手动维护一个被禁止的用户名列表,因为他们的个人资料URL将被站点全局内容覆盖(例如,登录),您仍然必须小心对于恶意用户可能能够利用欺骗其他用户进入某些事件的情况,但它会起作用。
您可以使用路径作为路径文件末尾的延伸,但这不是可取的 - ssokolow已经解释了原因。我使用了一个非常类似于CMS的东西,但是对于页面而不是用户而言,唯一性由系统维护。
如果URL必须像www.example.com/username而不是www.example.com/users/username那样读取,那么我会考虑通过apache重写url来完成。如果用户名与网页名称一致,这可能仍会给您带来问题,并且可能会让访问者不提及搜索引擎。
保持简单 - 不要让自己头疼。
这是用户以这种方式访问他们的帐户的一个很好的功能,与其他答案相反,我不认为这是一个令人头疼或不受欢迎的任何方式。
实现此目标的最佳方式是使用路由,但不是手动 - 数据库驱动的路由。马克故事的话题一个伟大的文章,我已经使用非常方便和成功的这种做法非常大的网站:
http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp
我所做的唯一的变化是我保持所谓的“路线”表并有相应的路线模型。路线表中只有id/name/value字段。这个名字是很好的URL(在你的情况下是“somegreatuser”),而这个值是系统URL(例如users/view/123)。
您只需要维护一个保留的用户名黑名单,这很容易使用路由模型中的验证完成。
- 1. 代码点火器中的自定义控制器类名称
- 2. CakePHP - 自定义路由控制器
- 3. 来自CakePHP的远程控制器名称URL
- 4. Spring MVC控制器自定义参数名称
- 5. Yii2。设置自定义控制器名称空间
- 6. Grails自定义脚手架可以访问控制器名称
- 7. CakePHP的控制器别名
- 8. CakePHP的路线修改控制器名称/读取控制器命名
- 9. 我可以在Symfony2中改变我的自定义控制器的名称?
- 10. CakePHP:用一个变量管理控制器中的表名称
- 11. CakePHP:获取模型中的当前控制器名称
- 12. 如何将具有自定义名称的模型加载到控制器中
- 13. 自定义控制器
- 14. CakePHP中的自定义表名
- 15. 控制器名称的型号名称
- 16. 新定义的视图控制器的名称更新为新名称
- 17. 在Cakephp URL中传递CamelCase控制器名称是否好?
- 18. 如何从URL中删除Cakephp控制器名称
- 19. CakePHP控制器自定义函数不被识别
- 20. MvvmCross转换器的自定义名称
- 21. ASP.NET MVC自定义筛选器属性带控制器/动作名称
- 22. Laravel 5资源控制器中的自定义命名路由
- 23. 如何自定义URL以使用与我的控制器不同的名称?
- 24. rails未定义的方法控制器名称
- 25. 在控制器中自定义UITabBarItems?
- 26. Cakephp生成小写的URL与大写控制器名称
- 27. ASP.Net MVC3:创建自定义URL,但不包含确切的控制器名称
- 28. 创建自定义名称服务器
- 29. 自定义名称索引器
- 30. 控制器中未定义的索引(CakePhp)