使用Zend中的视图助手将param附加到当前URL

时间:2011-05-17 13:11:58

标签: php zend-framework url zend-route view-helpers

在我的布局脚本中,我希望创建一个链接,使用url视图助手将 [?|&] lang = en 附加到当前网址。所以,我希望这种情况发生:

http://localhost/user/edit/1 => http://localhost/user/edit/1?lang=en
  http://localhost/index?page=2 => http://localhost/index?page=2&lang=en

我尝试过建议Zend Framework: Append query strings to current page url的解决方案,直接访问路由器,但确实有效。

我的布局脚本包含:

<a href="<?=$this->escape( $this->url( array('lang'=>'en')) )?>">English</a>

如果使用默认路线,它将附加 / lang / en ,但是当使用其他路线时,根本不会附加任何路线。
那么,有没有办法在Zend中执行此操作而不必解析URL?

修改
对不起,我的错误解释。不,我还没有制作自定义路由器。我刚刚添加了其他路由。我的错。一条不起作用的路线是:

$Routes = array(
    'user' => array(
        'route' => 'admin/user/:mode/:id',
        'defaults' => array('controller' => 'admin', 'action' => 'user', 'mode'=>'', 'id' => 0)
    )
);

foreach( $Routes as $k=>$v ) {
    $route = new Zend_Controller_Router_Route($v['route'], $v['defaults']);
    $router->addRoute($k, $route);
}

1 个答案:

答案 0 :(得分:1)

UPD:

您必须在路线中添加通配符或明确定义“lang”参数。

'admin/user/:mode/:id/*'

此外,根据您的评论,您可以执行以下操作:

class controllerplugin extends Zend_Controller_Plugin_Abstract
{
    function routeShutdown($request)
    {
        if($request->getParam('lang', false) {
            //store lang
            Zend_Controller_Front::getInstance()->getRouter()->setGlobalParam('lang', NULL); //check if this will remove lang from wildcard parameters, have no working zf installation here to check.
        }
    }
}