연습 및 사용자 결과를 관리하는 CakePHP에서 응용 프로그램을 만들고 싶습니다. 사용자와 결과는이 질문에서 중요하지 않습니다.CakePHP, 일반 컨트롤러를 사용하는 옵션 컨트롤러 용 라우팅
.ini 구성 파일에 특정 테이블과 행만 추가하는 연습을 추가하고 싶습니다. 특정 응용 프로그램이 없으면 응용 프로그램은 GenericExercisesController로 라우트해야합니다. 컨트롤러는 특정이 없으면 GenericExerciseModel을로드해야합니다. 나는 모델 로딩 부분적으로이 같은 컨트롤러와 라우팅과 관리했던 :
그래서
foreach(Configure::read('exercisesTables') as $exerciseName){
if(App::import('Controller', Inflector::pluralize($exerciseName))){
Router::connect('/exercises/'.Inflector::pluralize($exerciseName).'/:action', array('controller' => Inflector::pluralize($exerciseName)));
}else{
Router::connect('/exercises/'.Inflector::pluralize($exerciseName).'/:action', array('controller' => 'GenericExercises', 'fakeModel' => $exerciseName));
}
}
route.php
에서 내가 주소를 사용해야 푸 운동 를로드하려면 :
http://example.com/exercises/Foos/view
을
특정 컨트롤러가 존재하면 문제가되지 않습니다.
역방향 라우팅을 사용하여보기에서 링크를 생성 할 때 문제가 시작됩니다. 운동 푸 특정 컨트롤러가있는 경우이 제대로 작동 :
print $this->Html->url(array('controller' => Inflector::pluralize($exerciseName), 'action' => 'view'));
는 생산 : /exercises/Foos/view
그러나 운동 바가 특정 컨트롤러가없는 경우 다음 같은 코드를 생성합니다 /Bars
이로 인해 문제가 발생하면 Bars
컨트롤러가 없습니다.
일시적 나는 수동으로 해당 링크를 생성하고있어,하지만 난이 최선의 해결책이라고 생각하지 않습니다
print $this->Html->url("/".Configure::read('exerciseRoutingPrefix')."/".Inflector::pluralize($exerciseName)."/view");
은 아마 당신의 사람이 더 나은 솔루션을 알고있다. 제 질문을 읽어 주셔서 감사합니다.
UPDATE 1 :
Router::connect('/', array('controller' => 'questions', 'action' => 'regulations'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/help', array('controller' => 'pages', 'action' => 'faq'));
왜 stackoverflow가 내 질문의 시작 부분에서 "안녕하세요"라는 문구를 삭제합니까? –
일부 편집자는 불필요한 문구를 삭제합니다. "감사합니다"와 "안녕하세요"가 공손하고 훌륭하게 질문 할 수도 있지만 문제 자체에 도움이되지 않으므로 일부는이를 제거하는 것을 선호합니다. – Nunser
여기서 foreach를 게시하기 전에'routes.php'에 다른 경로가 정의되어 있습니까? – Nunser