2014-10-03 75 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

它可能會失敗,因爲你沒有設置控制器默認命名空間。當我從Windows切換到Linux時,我也遇到了一些控制器名稱的問題。使用小寫名稱似乎解決了這個問題。

$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方法不適用於我。所以我附加了一個監聽器來處理這個問題。

$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 2016-02-28 01:16:32