2

私のlayout-scriptで、URLビューヘルパーを使用して、現在の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が提案する解決策を試しました:現在のページのURLにクエリ文字列を追加し、ルーターに直接アクセスしますが、それは機能します。

私のレイアウトスクリプトには次のものが含まれています。

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

デフォルトルートを使用すると/lang/ enが追加されますが別のルートを使用すると何も追加されません。
それで、私がURLを解析しなくても、Zendでこれを行う方法はありますか?

編集
間違った説明でごめんなさい。いいえ、カスタムルーターは作成していません。他のルートを追加しました。私の悪い。動作しないルートの1つは次のとおりです。

$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 に答える