2

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

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

我已经尝试过建议的解决方案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);
}
4

1 回答 1

1

更新:

您必须在路由中添加通配符或明确定义“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.
        }
    }
}
于 2011-05-17T14:04:56.817 回答