2012-07-13 4 views
2

CakePHP에서 하나의 CakePHP 설치 내에서 '여러 개의'응용 프로그램을 실행해야하는 응용 프로그램을 만들고 있습니다. 뭔가 내가 모든 응용 프로그램에 대해 동일한 행동 N 컨트롤러가하지만 데이터베이스 호출 할 때 그들 만 다른 같은 - 어쨌든, 나는이 같은 동작 경로 만들어야합니다CakePHP에서 가변 접두사 라우팅

/app1/controller/action/a/b/c
/app2/controller/action/a/b/c

을 (app1app2 아무것도 변경할 수 있습니다 영숫자 문자열이있는 곳)과 같은 라우팅 될 것이다

: (등등 또는 APP2에 대해 동일하고)

/controller/action/app1/a/b/c

,536,

라우트 된 라우트는 단지 /controller/action/a/b/c 일 수도 있지만 컨트롤러 내의 추가 프로세싱을 위해 app1/app2 URL 부분을 컨트롤러 내에서 액세스 할 수있는 방법이 필요합니다. CakePHP에서 이것을 할 수있는 방법이 있습니까? 감사.

약간 관련된 질문 : 위를 달성하는 '기본'앱 이름을 설정하는 방법이 (내가 /controller/action/a/b/c 액세스를 시도 할 때 자동으로 /global/controller/action/a/b/c를 입력하는 것과 동일로 라우팅됩니다처럼은?)

감사합니다.

효과적으로 : 내가 그냥 /controller/action/the/rest/foobar/controller/action/the/rest 같은 URL을 처리하기 위해 라우팅 (또는이 작업을 수행 할 수있는 다른 CakePHP의 '방법')를 사용하고 어떻게 든, 컨트롤러에을 을 "는 foobar"를 통과한다합니다. "Foobar"는 영숫자 문자열입니다.

답변

2

는 :

Router::connect( 
    '/:app/:controller/:action/*', 
    array(), 
    array('pass' => array('app')) 
); 

이 컨트롤러의 행동에 첫 번째 인수로 app의 가치를 전달합니다. 컨트롤러에 당신이 뭔가 할 것이다 그래서 : 등

class FoosController Extends AppController { 
    public function view_something($app, $a, $b, $c) { 
     // ... 
    } 
} 

당신이 /myApp1/foos/view_something/1/2/3을 요청하면 $app의 값이 'myApp1' 것, $a의 값이 1 것을

전에, 을 다른 경로를 연결하려면 위와 같이 다음을 추가 할 수 있습니다.

Router::connect(
    '/pages/:action/*', 
    array('app' => 'global', 'controller' => 'pages'), 
    array('pass' => array('app')) // to make app 1st arg in controller 
); 
+0

우후, 고마워. 참고로,/: app /가 전달되지 않으면 어떻게됩니까? 거기에 기본값을 지정하는 방법이 있습니까? 마치/pages/me에 가려고하면/global/pages/me에 갈 수 있습니까?: P –

+0

@JimmieLin 제안에 대한 편집을 참조하십시오. –

+0

정말 고마워요! –

1

라우팅 대신 데이터베이스를 동적으로 변경하려면 Model attribute -> dbconfig을 사용해야합니다. 또한 응용 프로그램과 연결할 데이터베이스를 식별 할 수있는 메소드에 대한 인수를 보내야합니다. app/Config/routes.php 추가에

+0

효과가 없는지 문의하십시오. –

+1

dbconfig는 나중에 컨트롤러에서 데이터를 처리 할 수있는 방법 일뿐입니다. 원하는 작업은 라우팅을 사용하여 컨트롤러에 인수를 전송하는 것입니다. -/db_name/controller/action/the/rest/of/the/url/. 라우팅을 사용하여 db_name을 "가져 와서"해당 컨트롤러로 보내려면 어떻게합니까? –