我的情况是这样的: 我正在使用的应用程序使用子域来检测客户端是谁。 ie:client1.site.com,client2.site.com 这一切都工作正常(我没有使用任何特殊路线)。如何设置Zend Route以在MVC参数之前使用额外的“参数”?
现在,我需要将我的代码放入'测试'环境。不过,在这种情况下,我仅限于一个子域。 即:static.testsite.com
我的想法是使用Zend的路由到一个程度,这样我可以请求转换如下: static.testsite.com/client1/... 或 static.testsite.com/client2/...
因此,第一个“参数”需要是客户机名称,随后由MVC标准参数(模块/控制器/动作)。
我打算将此路由逻辑添加到仅在测试环境中可用的Controller插件的routeStartup挂钩。
首先,有没有一种更简单的方法来完成这个我从未想到的工作?其次,如果没有,有没有人有这种需求的经验?
我正在尝试Zend提供的不同路由,但到目前为止,我一直不成功(客户端名称不断变为控制器等)。
任何帮助,非常感谢。 谢谢。
编辑:我试图通过操纵请求对象的请求uri以丑陋的方式做到这一点。但是,这会使网站的其他部分在他们的URL中没有/ clientX /部分,从而导致更多问题。使用/ clientX /部分更新所有位置也不可行。所以,尽管我可以检索客户端,但网站的其他部分仍然无法使用,这使我认为Route是唯一的方法。
编辑#2:我得到它使用下面的代码;然而
// within a Controller Plugin at routeStartup
$oFrontController = Zend_Controller_Front::getInstance();
$oRouter = $oFrontController->getRouter();
$oNewDefaultRoute = new Zend_Controller_Router_Route(
':testClient/:controller/:action/*',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index',
'testClient' => null,
)
);
$oRouter->addRoute('default', $oNewDefaultRoute);
的问题依然存在,因为它不影响任何现有的URL。所以试图访问它们中的任何一个会导致没有testClient的地方因此导致错误。我相信在初始的“客户”分配之后需要采用一些基于会话的解决方案。
但是,如果有人知道更优雅的方式来做到这一点,请让我知道。谢谢。
为什么不使用client1test.testsite.com?实际上,它是一个独立的客户端,但它允许你有一个完全独立的测试与生产环境 – Ashley 2012-03-06 10:56:23
这将是理想的,因为它不会真的需要任何这些变化。不幸的是,问题在于这些是实际的域/子域,因此我无法为测试环境中的每个客户端创建子域。如上所述“我仅限于一个子域名”。 – 2012-03-06 11:03:07
URL中的'/ clientX'部分是否_always_?你有没有这个部分被省略的情况,第一个参数是模块还是控制器? – bububaba 2012-03-06 11:05:59