TRAJOIN is an Application to Translate symfony documents Jointly.

home > 1.2/cookbook/en > error_templates.txt

[1] Edit ↑TOP

エラーのテンプレートをカスタマイズする方法


[2] Edit ↑TOP

エラーが起きるとき、ページが見つからないエラーであれ、サーバーの内部エラー、もしくはその他の例外であれ、symfonyはエラーページを表示します。ページの内容は環境とリクエストの形式によります。


[3] Edit ↑TOP

説明をわかりやすくするために、ArticleモジュールのHTML、XML、もしくはJSON形式の表現を返すAPIモジュールを持つアプリケーションがある場合を考えてみましょう。


[4] Edit ↑TOP

これを機能させるルーティングの構成は次の通りです:


[5] Edit ↑TOP

// apps/frontend/config/routing.yml
api_article:
  url:   /api/article/:id.:sf_format
  param: { module: api, action: article }
  requirements:
    sf_format: (?:html|xml|json)

[6] Edit ↑TOP

関連モジュールは次の通りです:


[7] Edit ↑TOP

class apiActions extends sfActions
{
  public function executeArticle($request)
  {
    $this->article = ArticlePeer::retrieveByPK($request->getParameter('id'));

    $this->forward404Unless($this->article);
  }

  // ...
}

[8] Edit ↑TOP

存在しないidをリクエストに渡すと、アクションは404ページに転送されます。開発環境の中でHTMLフォーマット (http://localhost/frontend_dev.php/api/article/1.html)を使う場合、次のようなエラーメッセージが表示されます:


[9] Edit ↑TOP

開発環境の404.html


[10] Edit ↑TOP

本番環境(http://localhost/frontend_dev.php/api/article/1.html)において、明らかなセキュリティ上の理由からページは大きく異なります:


[11] Edit ↑TOP

本番環境の404.html


[12] Edit ↑TOP

では、開発環境でフォーマットをXML(http://localhost/frontend_dev.php/api/article/1.xml)に変更するときにこれがどのように振る舞うのか見てみましょう:


[13] Edit ↑TOP

開発環境の404.xml


[14] Edit ↑TOP

次に、本番環境(http://localhost/api/article/1.xml)です:


[15] Edit ↑TOP

本番環境の404.xml


[16] Edit ↑TOP

ご自分で確認できるように、symfonyに返されたエラーメッセージはリクエストされたXML形式です。


[17] Edit ↑TOP

この例は404ページのためにエラーメッセージをカスタマイズするお手本を示しましたが、他の捕捉されない例外に対しても同じことが当てはまります。


[18] Edit ↑TOP

テンプレートをプロジェクトのディレクトリ(config/error/)もしくはアプリケーションのディレクトリ(apps/frontend/config/error/)に追加することでそれぞれのフォーマットの出力をカスタマイズすることもできます。


[19] Edit ↑TOP

例えば、XML形式のエラーメッセージのための出力をカスタマイズするためには、config/error/error.xml.phpファイルを作ります。 symfonyはカスタマイズされたテンプレートが存在すればデフォルトの代わりに使うぐらい賢いです:


[20] Edit ↑TOP

<?xml version="1.0" encoding="<?php echo sfConfig::get('sf_charset', 'UTF-8') ?>"?>
<error>
   <code><?php echo $code ?></code>
   <message><?php echo $text ?></message>
</error>

[21] Edit ↑TOP

本番環境のカスタマイズされた404.xml


[22] Edit ↑TOP

エラーメッセージのテンプレートをカスタマイズするとき、次の変数にアクセスできます:


[23] Edit ↑TOP
  • $code: レスポンス状態のコード
  • $text: レスポンス状態のテキスト
  • $name: 例外のクラスの名前
  • $message: 例外メッセージのメッセージ
  • $traces: PHPトレースすべてを含む配列
  • $format: リクエストされたフォーマット

[24] Edit ↑TOP

あまり面白くない出力だとしても、config/error/exception.xml.phpを作ることで、開発環境での出力をカスタマイズすることも可能です。


[25] Edit ↑TOP

デフォルトのテンプレートはsymfonyのlib/exception/data/ディレクトリに保存されておりこれはテンプレートをカスタマイズするための良い始点です。


[26] Edit ↑TOP

あなただけの独自フォーマットを作るとき、適切なエラーメッセージのテンプレートを作ることが必要になります(config/error/error.FORMAT_NAME.phpconfig/error/exception.FORMAT_NAME.php)


[27] Edit ↑TOP

タスクを簡単にするために、既存のエラーテンプレートを格納できます。例えば、フォーマットがXMLのようなものである場合、デフォルトのXMLエラーメッセージのテンプレートを格納できます:


[28] Edit ↑TOP

<?php include sfException::getTemplatePathForError('xml', true) ?>

[29] Edit ↑TOP

フォーマットのサポートは可能な限りHTTPを受け入れるsymfony 1.2の別の実例でもあります。


Comments

Menu

Documentation



Latest Histories

Format support is yet ano ...
brtRiver(2008-12-28 21:42:18)
[php] <?php in ...
brtRiver(2008-12-28 21:41:37)
To ease the task, you can ...
brtRiver(2008-12-28 21:41:25)
When you create your very ...
brtRiver(2008-12-28 21:41:09)
The default templates are ...
brtRiver(2008-12-28 21:40:48)
It is also possible to cu ...
brtRiver(2008-12-28 21:40:28)
* `$code`: The respon ...
brtRiver(2008-12-28 21:40:06)
When you customize an err ...
brtRiver(2008-12-28 21:39:49)
![404.xml customized in t ...
brtRiver(2008-12-28 21:39:30)
[xml] <?xml ve ...
brtRiver(2008-12-28 21:39:16)
For example, to customize ...
brtRiver(2008-12-28 21:39:05)
You can even customize ea ...
brtRiver(2008-12-28 21:38:46)
This example demonstrates ...
brtRiver(2008-12-28 21:38:30)
As you can see for yourse ...
brtRiver(2008-12-28 21:38:10)
![404.xml in the producti ...
brtRiver(2008-12-28 21:37:50)
And now, in the productio ...
brtRiver(2008-12-28 21:37:33)
![404.xml in the developm ...
brtRiver(2008-12-28 21:37:19)
Now, let's see how i ...
brtRiver(2008-12-28 21:37:06)
![404.html in the product ...
brtRiver(2008-12-28 21:36:51)
In the production environ ...
brtRiver(2008-12-28 21:36:30)

Untranslated