2012-11-11 6 views
2

URL 기반 언어를 사용하고 있으며 URL에 들어오는 매개 변수가있는 페이지가 있습니다. 들어오는 매개 변수로 리디렉션 - CakePHP

URL에 검색어 문자열 ('? x = y') 또는 이름이 지정된 params ('x : y')가 필요하지 않으므로 http : // localhost/cakeapp/us/controller/action/param1/PARAM2/3 당겨 내 AppController가 URL이 언어 정의 된 경우에는 언어가 정의되지 않은 경우 내가 점검하고 (예를 들어, 사용자가 요청 에서 http

: // localhost를/cakeapp/컨트롤러/액션/PARAM1/PARAM2/param3) 그러면 동일한 매개 변수로 언어를 정의한 URL로 사용자를 리디렉션하고 싶습니다.

:

HTTP : // localhost를/cakeapp/컨트롤러/액션/PARAM1/PARAM2/3 당겨

HTTP

에 : 나는 리디렉션 할 // localhost/cakeapp/us/controller/action/param1/param2/param3

나는 사용한다.

$ this-> 리디렉션 (

라우터 :: URL (배열 ('언어'=> $ this-> 세션 -> ('Config.language'읽기), '기본'= > false))

);

하지만 HTTP로 사용자를 리디렉션 : // localhost를/cakeapp/우리/컨트롤러/매개 변수없이 행동.

입력 : $ this-> passedArgs 변수를 사용하여 Router :: url을 사용하여 URL을 빌드하는 방법이 있습니까?

답변

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] 
); 
+0

괜찮아요,하지만 내가 리디렉션하는 방법에 그들을 통과하지 않았는데 왜 올바른 컨트롤러와 작업에 리디렉션합니까 궁금해? 하지만 매개 변수를 전달해야합니까? –

+0

나는 얼마나 많은 params 소득을 모른다. 어떻게 매개 변수를 전달하여 메서드를 리디렉션 할 수 있습니까? 그들은 $ this-> passedArgs에 있습니다.배열을 매개 변수를 문자열로 예상하고, _implode ("/", $ this-> passedArgs) _를 사용하는 경우에는 URL의 % 2F (인코딩)로 변환합니다. –

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)); 
+0

고마워, 지금 까다로운 부분 : 내 사이트는 URL에서 여러 언어를 사용할 수 있으므로 "_us_"일뿐입니다. 어떻게 동적으로 만드나요? "_en_, _de_, _it_, etc"일 수 있습니다. –

+0

라우팅은 PHP 파일이므로 위의 'Router ::'명령 전에 리디렉션 할 언어 코드를 결정하고 변수에 넣고, $ languageCode라고 말하고 위의'redirect' 줄을'Router :: redirect ('/ *', '/ cakeapp/'.$ languageCode.'/ '. substr ...' – domsom

관련 문제