11

保護された/view/systemフォルダーにerror404.phpファイルを作成したための404エラーページを表示したいと思います。

デフォルトで私はSitecontrollerを持っていて、それは以下のようなエラーアクション機能を含んでいました

public function actionError()
{
    if($error=Yii::app()->errorHandler->error)
    {

        if(Yii::app()->request->isAjaxRequest)
            echo $error['message'];
        else
            $this->render('error', $error);
    }
}

メイン設定ファイル内では、次のように定義されています

    'errorHandler'=>array(
        // use 'site/error' action to display errors
        'errorAction'=>'site/error',
    ),

私の問題は、404ページのみをカスタマイズする必要があることです。残りのエラーは、サイトコントローラーのエラー関数によって処理される方法で処理する必要があります。しかし、私はそれを行う方法を見つけることができませんでした。設定メインから'errorAction'=>'site / error'を削除すると、次のように呼び出して404エラーが表示されます。

        throw new CHttpException(404, 'Page not found');

しかし、そうすることで、レイアウトなしでページを表示することしかできません。また、他のカスタムエラーは404と同じように扱われますが、そうではありません。マニュアルを何度も読みましたが、それでも解決できません。

4

4 に答える 4

9

このコードをactionErrorに使用します:

$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
    if( $app->request->isAjaxRequest )
        echo $error['message'];
    else
        $this->render( 'error' . ( $this->getViewFile( 'error' . $error ) ? $error : '' ), $error );
}

ビュー/サイトで、404エラーの場合はerror404.phpを作成し、残りの場合はerror.phpを作成します。

または、別の方法で処理したいエラーの構成でparamを定義し、それに対してエラーコードを確認することもできます。

$app = Yii::app();
if( $error = $app->errorHandler->error->code )
{
    if( Yii::app()->request->isAjaxRequest )
        echo $error['message'];
    else    
        $this->render( 'error' . ( in_array( $error, $app->params[ 'customErrorPages' ] ) ? $error : '' ), $error );
}

エラーハンドラは次のように機能します。httpexceptionが発生すると、コンポーネントはerrorActionプロパティに値があるかどうかを確認し、値がある場合はこのコントローラのアクションを実行します。errorActionプロパティに設定値がない場合は、システムフォルダからのエラービューを表示します。したがって、システムビューフォルダーとコントローラーのビューフォルダーのエラービューを混在させる必要はありません。

于 2012-08-05T13:55:46.970 に答える
3

エラーが発生するたびに、siteControllerのアクションエラーが呼び出されます。そのアクションのエラールートをカスタマイズできます。次のように実行できます。

if(404==Yii::app()->errorHandler->error->code){
     //go to custome error page
else
   //code default error.php
于 2012-08-05T10:07:52.633 に答える
1

.htaccessでこれを行うことはできませんか?個人的には、エラーメッセージを保持するすべてのhtml phpファイルを含む「エラー」フォルダを作成し、エラーが発生したときにそれらのページを呼び出すように.htaccessを変更します。

リンク

http://www.javascriptkit.com/howto/htaccess2.shtml

http://www.addedbytes.com/for-beginners/error-documents-for-beginners/

エラーページを呼び出すディレクトリに.htaccessファイルを作成し、テキストファイルに次の行を記述します。

ErrorDocument 404     /404.html

同じディレクトリに404.htmlというページがあるとすると、404ページが見つからないというエラーが生成されると、404.htmlページが呼び出されます。

同じことが他のエラーコードでも機能します。

ErrorDocument 500     /500error.html

500エラーが作成され、500error.htmlファイルが同じディレクトリに存在すると仮定します。

于 2012-08-05T10:27:16.213 に答える
1

フレームワークの最新バージョン(私は1.14で作業しています)では、以下を使用します。

Yii::app()->errorHandler->error['code']

エラーは配列だからです。

于 2014-08-18T08:22:48.840 に答える