PhalconPHP设置默认控制器和默认操作

时间:2014-10-03 15:07:29

标签: php phalcon phalcon-routing

如何在 PhalconPHP 中设置默认控制器默认操作

我使用此代码但没有成功:

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

1 个答案:

答案 0 :(得分:6)

它可能会失败,因为您没有为控制器设置默认命名空间。当我从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方法对我不起作用。所以我将一个监听器附加到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);