douyan9417 2011-12-15 03:30
浏览 21
已采纳

路由和URL参数 - ZendFramework

I'm having an issue with zendframework routes and params.

I have language selector in my view page:

 <div class="language-chooser">
    <?
    $params = Zend_Controller_Front::getInstance()->getRequest()->getParams();
    unset($params['module']);
    unset($params['controller']);
    unset($params['action']);
    ?>
    <a href="<?= $this->url(array_merge($params, array('lang' => 'pt'))); ?>"><img src="<?= $this->baseUrl('/images/flags/br.png'); ?>" alt="" /></a>
    <a href="<?= $this->url(array_merge($params, array('lang' => 'en'))); ?>"><img src="<?= $this->baseUrl('/images/flags/us.png'); ?>" alt="" /> </a>
</div>

It works fine without routes. Accessing localhost/app/contact, I get the link correctly Ex.: localhost/app/contact/index/lang/en

But if I add a route

protected function _initRotas() {
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $route = new Zend_Controller_Router_Route(
                    '/contact',
                    array(
                        'module' => 'default',
                        'controller' => 'contact',
                        'action' => 'index'
                    )
    );
    $router->addRoute('contact', $route);
}

I get the link without the lang param. Ex.: localhost/app/contact/

How could i solve this issue?

Thanks

  • 写回答

2条回答 默认 最新

  • doutang6130 2012-01-06 20:53
    关注

    The first example is based on the default route, which looks like :module/:controller/:action/* Notice the * at the end of the route; it defines that the url can contain additional key/value pairs.

    To make your contact route work, you could either use

    $route = new Zend_Controller_Router_Route(
        '/contact/:lang',
        array(
            'module' => 'default',
            'controller' => 'contact',
            'action' => 'index'
        )
    );
    

    this will make the url look like /contact/pt. Or you can use:

    $route = new Zend_Controller_Router_Route(
        '/contact/*',
        array(
            'module' => 'default',
            'controller' => 'contact',
            'action' => 'index'
        )
    );
    

    Which will result in /contact/index/lang/pt

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改