如何在Zend_Controller_Router_Route_Hostname路由中将URL组合回www路由?

时间:2013-02-09 22:34:39

标签: zend-framework zend-route

我花了好几个小时试图找到解决方案,但似乎没有那么多。

我目前有admin.domain.com指向管理模块,这很容易做到:

$adminRoute = new Zend_Controller_Router_Route_Hostname(
        'admin.domain.com', array(
            'module' => 'admin'
        )
    );
$router
    ->addRoute('admin', $adminRoute->chain(
        new Zend_Controller_Router_Route(
            ':controller/:action/*',
            array(
                'controller' => 'index',
                'action' => 'index'
            ))
    ));

所有其他路由都将按照默认路由工作,以便www.domain.com/module/controllerwww.domain.com/controller都按预期工作。

但是,如果我当前位于admin模块中并想要汇总指向www.domain.com路线的网址,那么如何做到这一点?

不幸的是,这并不是将默认路由设为www.domain.com的主机名路由的简单情况,因为这样您就不会从路径中的“可选”模块参数中受益。例如。

    $wwwRoute = new Zend_Controller_Router_Route_Hostname(
        'www.domain.com', array(
            'module' => 'default'
        )
    );
$router
    ->addRoute('default', $wwwRoute->chain(
        new Zend_Controller_Router_Route(
            ':module/:controller/:action/*',
            array(
                'controller' => 'index',
                'action' => 'index'
            ))
    ));

只需使用www.domain.com/default/controller/action格式而不是www.domain.com/controller/action

格式构建所有路径

文档建议默认路由使用Zend_Controller_Router_Route_Module,但我已经尝试了,似乎还有更多不仅仅是。

有什么想法吗?

编辑:我怀疑你需要做一种方式或者另一种方式,即在子域上拥有所有模块,然后严格按照/controller/action/*路由请求,或者将模块作为路由的一部分路径。否则,一个模块可以通过两个URL访问 - module.domain.comwww.domain.com/module - 显然有一些方法可以解决这个问题,当然,你可以为每个模块设置特定的路由,从而不依赖于'默认Zend路由的可选'模块功能。

0 个答案:

没有答案