[FuelPHP 1.7] Restコントローラの出力フォーマットに関するお話

PHP

Webチームの日下部です。

FuelPHP(1.7)のRestコントローラによる出力のフォーマット指定にまつわるお話を書いてみます。

いくつか指定方法があるので順番に!

 

デフォではAcceptの内容をみる

Restの設定のデフォは fuel/core/config/rest.php に記述されていて、その中で出力フォーマットに関しては

'ignore_http_accept' => false,
'default_format' => 'xml',

となっています。これの意味するところは、

  • リクエストヘッダのAcceptの内容を無視「しない」
  • フォーマット指定がなければXML形式で出力

というものです。

さてこの状態で Advanced REST client を使って、Acceptヘッダをいじらずにリクエストを送ってみると、

    Accept: */*

として解釈され、「形式なんでもOK」→「じゃあデフォのXMLどうぞ」となります。

ここで、 Advanced REST client の Headers の欄に

    Accept: */json

と書いてリクエストしてみると、「JSONで」→「じゃあJSONどうぞ」となります。

 

Acceptの内容を無視してみる

コンフィグを上書きしてリクエストヘッダのAcceptの内容を無視するようにしてみます。

fuel/app/config/rest.php を作成して、

 return array(
    'ignore_http_accept' => true,
    'default_format' => 'xml',
);

と記述します。この状態で 「Accept: */json」 としても無視されて、「JSONで」→「じゃあXMLどうぞ」となります。

 

URIによる指定

URI内のアクション名の末尾に .xml という風にフォーマットを付け足すと、コンフィグによらずそのフォーマットで返ってきます。

    http://localhost/test/index.xml

 

コントローラのプロパティによる指定

何よりも優先されるのがコントローラの format プロパティです。

    protected $format = null;

デフォでは null がセットされていますが、ここでフォーマットを指定すると、問答無用でそのフォーマットで返却されます。

 

優先度

まとめると、優先度は

Acceptによる指定 < URIによる指定 < プロパティによる指定

となっています。

 

というか

ドキュメントに全部書いてありますね。お後がよろしいようで。


この記事をかいた人

About the author