2012-07-26 2 views
0

관리자가 정적 컨텐츠 페이지를 동적으로 추가/편집/제거 할 수있는 애플리케이션의 정적 페이지 컴포넌트를 작성했습니다. 이들은 데이터베이스에 저장됩니다.기존 컨트롤러 확인

(예를 들어, 당신은 할 수 "에 대해"이라는 페이지를 만들고 약 /에서는 MyApplication에 그것을 방문 할 수 있습니다)

이이 페이지에 대한 내 라우팅입니다 :

$page = new StaticPage(); 
$slugs = $page->find('list', array(
    'fields' => array('slug'), 
    'recursive' => -1, 
    'order' => 'StaticPage.slug DESC', 
)); 

Router::connect('/:slug', 
    array('controller' => 'static_pages', 'action' => 'display'), 
    array(
     'pass' => array('slug'), 
     'slug' => implode($slugs, '|') 
    ) 
); 

지금은 문제가, 그 기존 컨트롤러 (예 : 사용자)와 어울리는 페이지를 만들면 UsersController에 대한 Route를 덮어 씁니다.

그래서 블랙리스트 나 이와 비슷한 것이 필요합니다. 유효성 검사 규칙을 작성하기 시작했습니다. 여기에 해당 컨트롤러가 있는지 확인하고 싶습니다. cake 1.3의 경우 컨트롤러가 존재하지 않으면 false를 반환하는 "loadController"함수가 있지만 cake 2.x의 경우에는 그러한 함수가 없습니다. 어떻게 든 이걸 놓친 거니? 새로운 이름이 있습니까? 아니면 현재 유틸리티 라이브러리에 있습니까?

아니면이 문제를 해결하는 더 좋은 방법이 있습니까? 지금이 내 검증 방법 쉽게 컨트롤러

+0

내가 확실하지 않지만 예외 처리를 사용해야 할 수도 있습니다. http://book.cakephp.org/2.0/en/development/exceptions.html#exception-classes. MissingControllerException은 존재하지 않는 컨트롤러에 액세스하려고 할 때 사용할 수있는 미리 정의 된 예외 클래스입니다. –

+0

CakePHP 2.X는 _loadController() 메소드가 포함 된 새로운 클래스 "CakeRequest"를 도입했습니다. http://api20.cakephp.org/class/dispatcher#method-Dispatcher_loadController이 링크는 도움이 될 것입니다. –

답변

2

이 시도해야

$route = Router::parse($check['slug']); 
$controllerName = Inflector::camelize($route['controller'] . 'Controller'); 

$aCtrlClasses = App::objects('controller'); 

    foreach ($aCtrlClasses as $controller) { 
    if ($controller != 'AppController') { 
     // Load the controller 
     App::import('Controller', str_replace('Controller', '', $controller)); 

     // Load the ApplicationController (if there is one) 
     App::import('Controller', 'AppController'); 
     $controllers[] = $controller; 
    } 
    } 

    if (in_array($controllerName, $controllers)) { 
    return false; 
    } else { 
    return true; 
    } 
+0

감사합니다. – nahri

관련 문제