使用Zend路由sudmains控制器

时间:2013-12-17 12:56:10

标签: zend-framework subdomain routes zend-route

我的应用程序上有以下结构:

Modules =>

            default => site.com
            blog => blog.site.com
            admin => admin.site.com

我在我的引导程序中使用此代码来允许子域并重定向到以下模块:

$pathRoute = new Zend_Controller_Router_Route(':controller/:action/*', array('controller' => 'index', 'action' => 'index'));

    $frontController = Zend_Controller_Front::getInstance();
    $router = $frontController->getRouter();



    $blogDomainRoute = new Zend_Controller_Router_Route_Hostname(
            'blog.site.com', array(
        'module' => 'blog',
        'controller' => 'index',
        'action' => 'index'
    ));

    $router->addRoute('blogdomain', $blogDomainRoute->chain($pathRoute));

与adminDomainRoute相同的代码。

工作正常!但现在我注意到我的分页路线不起作用,我有以下路线来管理管理模块中的页面:

routes.usuarios.route = /usuarios/pagina/:pagina
routes.usuarios.defaults.module = admin
routes.usuarios.defaults.controller = usuarios
routes.usuarios.defaults.action = index
routes.usuarios.defaults.pagina = 1

我尝试将路线更改为

routes.usuarios.route = admin.site.com/usuarios/pagina/:pagina

但我仍然没有找到行动:

阵列(       'controller'=> 'USUARIOS',       'action'=> 'pagina',       'module'=> “管理员”,    )

如何路由admin.site.com/usuarios/pagina/1 admin.site.com/usuarios/pagina/3?

1 个答案:

答案 0 :(得分:1)

从您的设置中跳出来的是,在ini格式(您当前的管理路由)中,您正在使用默认路由器。那么这个路由器知道没有关于你所在的主机名,所以它正在寻找这样的网址:

site.com/admin.site.com/usuarios/pagina/1 admin.site.com/usuarios/pagina/3 

你想要的是这样的:

//Create a hostname route. This route is only concerned with the subdomain part of the uri
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    'admin.:host.:domain');
//Create a default router that would take care of the rest of the routing.
$defaultRoute = new Zend_Controller_Router_Route(
    '/usuarios/pagina/:pagina',
    array(
        'module'=>'admin',
        'controller'=>'usuarios',
        'action'=>'index'
    )
);
//Chain those two routes together to make them go one after the other. 
$defaultRoute=$hostnameRoute->chain($defaultRoute);

这段代码可能需要一些调整,但我认为这应该做你需要的。