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 に答える