2012-03-09 4 views
1

私はMark Story's "Down for Maintenance" pageのようなものをCakePHP 2.1.0を使って実装しようとしています。これは私がこれまで持っているものです。CakePHP 2.1.0: "保守中" Page

アプリ/コンフィグ/ bootstrap.phpの:

Configure::write('App.maintenance', true);

アプリ/コントローラ/ AppController.php:

if (Configure::read('App.maintenance')) { 
    App::uses('UnderMaintenanceException', 'Error/Exception'); 
    throw new UnderMaintenanceException(); 
} 

最後に、私はファイルを持っています"app/Lib/Error/Exception/UnderMaintenanceException.php"にありますが、何を入れるべきかわからないので空白です。デバッグが0に設定されているかどうかに関わらず、私はどのようにフレンドリーな "メンテナンス中です"ページにすることができますか?ありがとうございました!

編集:私の質問は多少不明です。私は、任意のページに行くと今、私はこの出力を得る

<?php 
class UnderMaintenanceException extends HttpException {} 

Fatal Error (256): [UnderMaintenanceException] 
#0 /Applications/MAMP/htdocs/my_project/app/Lib/Error/AppExceptionRenderer.php(12): AppController->beforeFilter() 
#1 /Applications/MAMP/htdocs/my_project/lib/Cake/Error/ExceptionRenderer.php(232): AppExceptionRenderer->_outputMessage('error500') 
#2 [internal function]: ExceptionRenderer->error500(Object(UnderMaintenanceException)) 
#3 /Applications/MAMP/htdocs/my_project/lib/Cake/Error/ExceptionRenderer.php(165): call_user_func_array(Array, Array) 
#4 /Applications/MAMP/htdocs/my_project/lib/Cake/Error/ErrorHandler.php(127): ExceptionRenderer->render() 
#5 [internal function]: ErrorHandler::handleException(Object(UnderMaintenanceException)) 
#6 {main} [CORE/Cake/Error/ErrorHandler.php, line 136] 

場合だから、私は、「アプリ/ libに/エラー/例外/ UnderMaintenanceException.php」ファイルに次のように置きますデバッグ値を0に変更しても、出力は得られません。それほどフレンドリーではない!いずれにせよ友好的な結果を出すために私は何ができますか?

+0

あなたは実際に何を求めていますか?メンテナンスページのために何を入れるべきか? – JJJ

+0

@Juhana明快さのために申し訳ありません。私は私の質問を更新しました。 – Nick

+0

[CakePHP 2.1.0の重複可能性:「保守のためのダウン」の作成方法](http://stackoverflow.com/questions/9674696/cakephp-2-1-0-how-to-create-down-for -maintenance-page) –

答えて

0

次のようにだけ、あなたが作成した新しいクラスのコンストラクタをオーバーライドします。

<?php 

/** 
* Represents an 'Under Maintenance Error' 
*/ 
class UnderMaintenanceException extends HttpException { 

    /** 
    * Constructor 
    * 
    * @param string $message If no message is given, it defaults to 
    *      'Application is Under Maintenance' 
    * @param int $code Status code, defaults to 403 
    */ 
    public function __construct($message = null, $code = 403) { 
     if (empty($message)) { 
      $message = 'Application is Under Maintenance'; 
     } 
     parent::__construct($message, $code); 
    } 
} 

いくつかは、適切なステータスコードは返すようにすることを主張するかもしれないが503(サービス利用不可)です。そして彼らは正しいでしょう。しかし、CakePHP 2.xがどのように5xxエラーを処理するのかにより、プロダクションでユーザーに見える唯一のエラーは「内部エラーが発生しました」です。これはあまり記述的ではありません。 4xxエラーはユーザーにエラーメッセージを渡しますが、erros 5xxはありません。

ステータス503を説明的なメッセージと共に返すには、ExceptionRendererを拡張し、関数error500($ error)をオーバーライドする必要があります。

関連する問題