使用传入参数重定向 - CakePHP

时间:2012-11-11 19:56:26

标签: cakephp cakephp-2.2

我正在使用基于网址的语言,并且我在网址中有一个包含传入参数的页面。

我不喜欢在URL中查询字符串('?x = y')或命名params('x:y'),所以我使用 http:// localhost / cakeapp / us / controller / action / param1 /参数2 /参数3

在我的 AppController 中,我检查URL是否已定义语言,如果没有定义语言(例如用户请求 http:// localhost / cakeapp / controller / action / param1 / param2 / param3 )然后我想简单地将用户重定向到具有相同参数的语言定义的URL。

简而言之: 我想重定向:

的http://本地主机/ cakeapp /控制器/动作/参数1 /参数2 /参数3

的http://本地主机/ cakeapp / US /控制器/动作/参数1 /参数2 /参数3

我用;

  

$这 - >重定向(

     
    

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

  
     

);

但它会将用户重定向到 http:// localhost / cakeapp / us / controller / action 而不带参数。

有没有办法使用带有传入 $ this-> passedArgs 变量的Router :: url构建网址。

2 个答案:

答案 0 :(得分: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]
);

答案 1 :(得分: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))
);

如果您没有应用前缀,则可以省略第二行中的字符串操作;像这样:

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