【问题标题】:PhalconPHP set default controller and default actionPhalconPHP 设置默认控制器和默认动作
【发布时间】:2014-10-03 15:07:29
【问题描述】:

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

我用过这段代码没有成功:

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

【问题讨论】:

    标签: php phalcon phalcon-routing


    【解决方案1】:

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

    【讨论】:

    • 我可以把这段代码放在哪里?是config\services.php吗?
    猜你喜欢
    • 2016-08-23
    • 2016-04-03
    • 1970-01-01
    • 2013-06-01
    • 2014-10-29
    • 2013-08-13
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    相关资源
    最近更新 更多