2

私は URL ベースの言語を使用しており、URL に受信パラメーターを含むページがあります。

URL のクエリ文字列 ('?x=y') または名前付きパラメーター ('x:y') が好きではないので、http://localhost/cakeapp/us/controller/action/param1/param2/param3を使用します

私のAppControllerでは、URL に言語が定義されているかどうかを確認しています。言語が定義されていない場合 (たとえば、ユーザーがhttp://localhost/cakeapp/controller/action/param1/param2/param3を要求している場合)、ユーザーを単純にリダイレクトしたい同じパラメーターを使用して、言語で定義された URL に。

要するに:リダイレクトしたい:

http://localhost/cakeapp/controller/action/param1/param2/param3

http://localhost/cakeapp/us/controller/action/param1/param2/param3

私が使う;

$this->リダイレクト(

Router::url(array('language' => $this->Session->read('Config.language'), 'base' => false))

);

ただし、パラメーターなしでユーザーをhttp://localhost/cakeapp/us/controller/actionにリダイレクトします。

着信$this->passedArgs変数で Router::url を使用して URL を構築する方法はありますか。

4

2 に答える 2

0

これは機能するはずです:

Router::connect(
    '/cakeapp/:language/:controller/:action/*',
    array(), 
    array('language'=>'[a-z]{2}')
);
Router::redirect(
    '/*', 
    '/cakeapp/us/'.substr(Router::url(null, false), 
    strpos(Router::url(null, false), '/', 1))
);

アプリプレフィックスがない場合は、2行目の文字列操作を省略できます。そのようです:

Router::connect(
    '/:language/:controller/:action/*', 
    array(), 
    array('language'=>'[a-z]{2}')
);
Router::redirect('/*', '/us/'.Router::url(null, false));
于 2012-11-17T13:46:31.350 に答える
0

パラメータをリダイレクトメソッドに渡すようにする必要があると思います:

function controllerAction($param1, $param2, $param3) {

    $this->redirect(

        Router::url(array('language' => $this->Session->read('Config.language'), 'base' => false)),
        $param1,
        $param2,
        $param3
    );

}

または、少なくとも何らかの方法で、パラメーターをリダイレクト メソッドに渡します。パラメーターを引数としてコントローラーアクションメソッドに直接渡していない場合は、これもできると思います。

$this->redirect(

    Router::url(array('language' => $this->Session->read('Config.language'), 'base' => false)),
    $this->request->params['named'][0],
    $this->request->params['named'][1],
    $this->request->params['named'][2]
);
于 2012-11-12T11:14:29.193 に答える