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