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


PhalconPHP set default controller and default action

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

我使用了这个代码没有成功:

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

它可能会失败,因为您没有为控制器设置默认名称空间。当我从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);