0

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

我使用此代码没有成功:

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

1 回答 1

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);
于 2014-10-03T15:55:05.290 回答