随着时间的推移,我开发了我自己的框架,它工作的很好-它很轻,它是快速的,并被证明可以处理体面的负载。
现在我正在做一个可以被描述为在线商店的项目,在那里每个用户都会有他的子域名,在那里他的项目将被出售。
我的框架的工作方式是将请求url分割成/并确定什么是控制器,操作参数。等等。
这很好,但是如何处理子域呢?
我已经修改了reqest对象,所以当我输入时可以这样说:
(我添加了SeverAlias *.shop.local )
以下是我的请求对象的样子:
DPLS_Request Object
(
[_request] => Array
(
[0] =>
[1] =>
[action] => defaultAction
[controller] => home
)
[_params] => Array
(
)
[_rurl:private] => kodi.shop.local
[_segment] => kodi
[get_params] => Array
(
)
)因此,_segment是子域,以后我可以在代码中使用它来验证它与用户名和其他东西的关系,但在此之前我就有概念上的问题。我的问题是,我的框架期望传递一些控制器和操作,因为他在URL末尾得到的全部信息是/他假设它应该显示索引页:(
接下来该怎么办..。如何将子域整合到整个mvc控制器/动作故事中?
一个快速而肮脏的解决方法是修改我的请求类的一部分:
if($this->_request['controller']==''){
$this->_request['controller'] = DEFAULT_CONTROLLER;
}
if($this->_request['action']==''){
$this->_request['action'] = DEFAULT_ACTION;
}并将其封装到另一个(如果是)中,以测试_segment是否存在,然后将其分配给控制器默认的_SHOP _CONTROLLER,我将在配置文件中将其定义为“存储”
因此,上面的请求将类似于键入http://shop.local/store/ (它将运行“存储”控制器和默认操作)
在这种情况下你会怎么做?在处理子域、控制器和操作时,是否存在“最佳实践”?
发布于 2009-02-05 16:18:07
听起来,在我看来,您所描述的方法是实现您正在添加的特性的逻辑下一步。这些新特性将带来一些额外的复杂性,但您的请求对象/路由器应该很好地封装“提供段时我应该调用什么控制器?在提供段和控制器时调用哪个控制器?”等等,我说去吧。
发布于 2009-02-06 17:18:27
我个人不会开始在与子域相关的框架中添加所有类型的“特定”条件,因为在一种情况下子域的含义并不一定意味着在另一种情况下相同的事情。(此外,框架假设的越多,它得到的支持就越多)
例如,有些人使用子域来定义区域设置(en.site.com用于英文版,fr.site.com用于法语.),但是在设置了此设置后,不管站点被翻译到哪种语言,它都会使用“相同”控制器。
只需做一个简单的重写规则,比如:将*.store.site.com重写到*.site.com/store/
发布于 2009-02-02 11:08:48
你说的听起来像是多租户。Mike在他正在构建的ASP.NET MVC应用程序中很好地编写了解决这个问题的方法,您可以在这里阅读:http://mikehadlow.blogspot.com/2008/11/multi-tenancy-part-2-components-and.html。
https://stackoverflow.com/questions/502835
复制相似问题