2014-10-03 2 views
0

어떻게 기본 컨트롤러PhalconPHP에서 기본 동작를 설정합니까? 내가 성공하지 않고이 코드를 사용했다PhalconPHP 세트 기본 컨트롤러와 기본 동작

:

$di->set('router', function() { 
    $router = new \Phalcon\Mvc\Router(); 
    $router->notFound(['controller' => 'Index', 'action'=> 'index']); 
    $router->setDefaultController('Bookmarks'); 
    $router->setDefaultAction('index'); 
    return $router; 
}); 

답변

5

당신이 컨트롤러에 대한 기본 네임 스페이스를 설정하지 않았기 때문에 그것은 실패 할 수 있습니다. 나는 또한 윈도우에서 리눅스로 전환 할 때 컨트롤러 이름의 경우에 약간의 문제가 있었다. 소문자 이름을 사용하면이 문제가 해결 된 것으로 보입니다.

$router = new Phalcon\Mvc\Router\Annotations(false); 

$router->removeExtraSlashes(true); 
$router->setDefaultNamespace('App\Controllers\\'); 
$router->setDefaultController('index'); 
$router->setDefaultAction('index'); 

/** 
* Standard MVC routes 
*/ 
$router->add('/', []); 

$router->add(
    '/:controller', 
    [ 
     'controller' => 1 
    ] 
); 

$router->add(
    '/:controller/:action/:params', 
    [ 
     'controller' => 1, 
     'action'  => 2, 
     'params'  => 3 
    ] 
); 

return $router; 

또한 notFound 메소드가 제대로 작동하지 않았습니다. 그래서이 문제를 처리하기 위해 리스너를 eventsManager에 연결했습니다.

$di->set('dispatcher', function() use ($di) { 
    // ERROR 404 - Page not found 
    $evManager = $di->getShared('eventsManager'); 
    $evManager->attach(
     "dispatch:beforeException", 
     function ($event, $dispatcher, $exception) { 
      switch ($exception->getCode()) { 
       case Dispatcher::EXCEPTION_HANDLER_NOT_FOUND: 
       case Dispatcher::EXCEPTION_ACTION_NOT_FOUND: 
        $dispatcher->forward(
         [ 
          'controller' => 'error', 
          'action'  => 'show404' 
         ] 
        ); 
        return false; 
      } 
     } 
    ); 
    $dispatcher = new Dispatcher(); 
    $dispatcher->setEventsManager($evManager); 
    return $dispatcher; 
}, true); 
+0

이 코드는 어디에 둘 수 있습니까? 그것은'config \ services.php'입니까? – SaidbakR