【发布时间】:2012-04-04 12:32:19
【问题描述】:
背景:构建一个允许用户管理休息室的 Web 应用程序(作为 CakePHP 的介绍)。休息室由博客、联系人、日历等组成。每个休息室都与一个子域相关联(因此 jcotton.lounger.local 会将您带到我的休息室)。用于创建新休息室、注册用户等的站点根目录托管在lounge.local 上。我正在使用 Cake 2.0。
问题:
-
我希望能够将与根站点 (lounger.local) 关联的操作和视图与各个休息室(lounge.local 的子域)分开。经过大量研究后,我确定了以下解决方案。我设置了一个前缀路由“休息室”,并在 routes.php 中添加了以下代码。与休息室关联的操作(和视图)都包含前缀休息室(例如:lounge_index())。你会怎么处理?
if(preg_match('/^([^.]+)\.lounger\.local$/',env("HTTP_HOST"),$matches)){ $prefix = "lounge"; Router::connect('/', array('controller' => 'loungememberships','action' => 'index', 'prefix' => $prefix, $prefix => true)); /* Not currently using plugins Router::connect("/:plugin/:controller", array('action' => 'index', 'prefix' => $prefix, $prefix => true)); Router::connect("/:plugin/:controller/:action/*", array('prefix' => $prefix, $prefix => true)); */ Router::connect("/:controller", array('action' => 'index', 'prefix' => $prefix, $prefix => true)); Router::connect("/:controller/:action/*", array('prefix' => $prefix, $prefix => true)); unset($prefix); } 每次用户在休息室内执行操作,例如在博客中发表评论,添加联系人等,都需要查找休息室_id(基于子域);这对于验证用户是否有权执行该操作并将相应的数据与正确的休息室相关联是必要的。我已经通过 AppController 中的 beforeFilter 函数实现了这一点。每次收到带有子域的请求时,都会执行搜索,并将 Lounge_id 写入会话变量。然后每个控制器加载 CakeSession 并读取相应的 Lounge_id。这比调用 ClassRegistry::Init('Lounge') 并在每个控制器中进行查找更好吗?有没有更好的解决方案?
提前感谢您的帮助
【问题讨论】:
-
这感觉像是对框架的滥用。