1

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

我目前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/controller两者www.domain.com/controller都按预期工作。

但是,如果我当前在admin模块内部并且想要组装一个指向www.domain.com路由的 URL,那么如何做到这一点?

不幸的是,将默认路由设置为主机名路由并不是一个简单的案例,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.com而且www.domain.com/module- 显然有办法解决这个问题,当然,您可以为每个模块设置特定的路由,从而不依赖默认 Zend 路由的“可选”模块特性。

4

0 回答 0