5

ルートが存在しない場合に 404 エラー コードをスローするにはどうすればよいですか?

ルーティング情報を設定した後の phalcon では、(ユーザーからの) 入ってくるルートがルート リスト内のいずれかのルートと一致するかどうかを確認する方法はありますか? 次に、ルートが存在しない場合は、404 エラーをスローします。

4

3 に答える 3

6

次のようなものを使用できます。

public function main()
{
    try {

        $this->_registerServices();
        $this->registerModules(self::$modules);
        $this->handle()->send();

    } catch (Exception $e) {

        // TODO log exception

        // remove view contents from buffer
        ob_clean();

        $errorCode = 500;
        $errorView = 'errors/500_error.phtml';

        switch (true) {
            // 401 UNAUTHORIZED
            case $e->getCode() == 401:
                $errorCode = 401;
                $errorView = 'errors/401_unathorized.phtml';
                break;

            // 403 FORBIDDEN
            case $e->getCode() == 403:
                $errorCode = 403;
                $errorView = 'errors/403_forbidden.phtml';
                break;

            // 404 NOT FOUND
            case $e->getCode() == 404:
            case ($e instanceof Phalcon\Mvc\View\Exception):
            case ($e instanceof Phalcon\Mvc\Dispatcher\Exception):
                $errorCode = 404;
                $errorView = 'errors/404_not_found.phtml';
                break;
        }

        // Get error view contents. Since we are including the view
        // file here you can use PHP and local vars inside the error view.
        ob_start();
        include_once $errorView;
        $contents = ob_get_contents();
        ob_end_clean();

        // send view to header
        $response = $this->getDI()->getShared('response');
        $response->resetHeaders()
            ->setStatusCode($errorCode, null)
            ->setContent($contents)
            ->send();
    }
}

Microコンポーネントを使用している場合は、これを使用できます。

$app->notFound(
    function () use ($app) {
        $app->response->setStatusCode(404, "Not Found")->sendHeaders();
        echo 'This is crazy, but this page was not found!';
    }
);

もちろん、他の人が .htaccess ファイルに関して投稿した提案を使用することもできますが、上記は、他に何も触れずに Phalcon で行う方法です。

Phalcon でエラーを処理する (または必要に応じてオーバーライドされる) デフォルトのエラー ハンドラーに関して、パイプラインを下る新機能もあります。

要旨の Nesbert へのクレジット

于 2012-09-25T17:00:03.343 に答える
5

404 ページの設定が完了したら、このページへの間違った URL に訪問者を送るだけで済みます。これを行うには、.htaccess ファイルに次の行を追加するだけです。

ErrorDocument 404 /404.php

404 エラー テンプレートは、好きな場所に配置できます。たとえば、すべてのエラー メッセージを errormessages というフォルダーに配置できます。

 ErrorDocument 404 /errormessages/404.php 
于 2012-09-25T16:47:34.903 に答える
0

PHPスクリプトの実行中にデフォルトのHTTP404エラーを使用する場合:

header("HTTP/1.0 404 Not Found");

ただし、これはクライアントに最初に送信するものであることを忘れないでください。

WebサーバーのデフォルトのPHPエラーをカスタマイズしたくない場合は、ソフトウェアによって異なります。たとえば、filde apacheを使用して、この種のエラーを表示するのは簡単です。

于 2012-09-25T16:48:25.667 に答える