4

次のようなURLを入力すると:

http://localhost/asdfasdfasdcxccarf

Phalcon から次のメッセージが表示されます。

PhalconException: AsdfasdfasdcxccarfController handler class cannot be loaded

このコントローラーは存在しないため、これは論理的です。

しかし、コントローラーを持たないすべての悪い URL をデフォルトのコントローラー IndexController にリダイレクトするように Phalcon を作成するにはどうすればよいですか?

4

2 に答える 2

10

依存性注入コンテナーには、次のディスパッチャー サービスを追加できます。内部 Phalcon エラー (間違ったコントローラーなど) をチェックし、指定されたコントローラーとアクションにユーザーを転送します。

$di->set('dispatcher', function() {

    $eventsManager = new \Phalcon\Events\Manager();

    $eventsManager->attach("dispatch:beforeException", function($event, $dispatcher, $exception) {

        //Handle 404 exceptions
        if ($exception instanceof \Phalcon\Mvc\Dispatcher\Exception) {
            $dispatcher->forward(array(
                'controller' => 'index',
                'action' => 'show404'
            ));
            return false;
        }

        //Handle other exceptions
        $dispatcher->forward(array(
            'controller' => 'index',
            'action' => 'show503'
        ));

        return false;
    });

    $dispatcher = new \Phalcon\Mvc\Dispatcher();

    //Bind the EventsManager to the dispatcher
    $dispatcher->setEventsManager($eventsManager);

    return $dispatcher;

}, true);
于 2014-07-02T11:21:29.303 に答える
2

初期化でデフォルトルートを設定できます:

$di->set('router', function() {
    $router = new \Phalcon\Mvc\Router();

    //your routes here

    $router->setDefaults(array(
        'controller' => 'index',
        'action' => 'index'
    ));

    return $router;
});

したがって、dispathcer がアクションを見つけられなかっCurentController => indexAction た場合は else を使用し、ディスパッチャーがコントローラーを見つけられなかった場合は使用しますIndexController => indexAction

于 2014-07-04T18:55:15.467 に答える