2013年11月23日土曜日

【バグ報告】FuelPHP1.7のRESTControllerの挙動について

バグ見つけました。
前回の

【バグ報告】FuelPHP1.7でViewModelが二回実行される


につづいて1.7のバグです。
前回も今回も1.8Dev版で治っており、コミュニティには報告されているため1.7.1では改修されてリリースされます。

対象 FuelPHP1.7(2013/11/23現在)

現象としてはURLで

/method.json

とアクセスするとJSONが本来吐かれますがこれを

/method

等の拡張子を指定せずに

HEADERS Accept text/html

の時には $response->body() の中がArrayになります。
具体的には直接拡張子をブラウザでアクセスした場合に発生します。
が本来はStringを期待してるのにArrayが来るのでエラーになります。
つまり結論から言うとFuelPHPのRESTControllerはHTMLの拡張子の実装はされていません。
ドキュメントには「シンプルなテーブルタグを吐き出す」となっていますが元々var_dumpしているだけでした。
これが1.7でvar_dumpすらせずにエラーになっていました。

対策としてはHTMLの実装が無いので必要なければ

/classes/controller/rest.php

--- a/classes/controller/rest.php 
+++ b/classes/controller/rest.php 
@@ -55,7 +55,7 @@ abstract class Controller_Rest extends \Controller 
        'jsonp'=> 'text/javascript', 
        'serialized' => 'application/vnd.php.serialized', 
        'php' => 'text/plain', 
-       'html' => 'text/html', 
+     //'html' => 'text/html', 
        'csv' => 'application/csv', 
    );   

'html' => 'text/html', をコメントアウト

と修正するのがいいと思います
今回はfuelphp_jpのMLに投稿してみました。
詳しい情報としてはこちら。

1.7のRESTControllerの挙動について(ML)

今回はMLに投稿してみました。
1.7.1や1.8の修正としては

  • HTMLはvar_dumpを実行すると言う仕様で統一する
  • ドキュメントはそのように修正する

という方針になったようです。
Githubのプルリクは英語必須でGitやGithubの使い方を覚えなきゃいけないのでハードルが高いと思います。
(まぁ間違ってたりしたらコメントくれてプルリク弾かれるだけなので気にせずガンガン練習がてらプルリク投げてもいい気もしますが)
ですがMLは日本語だしレスポンスも割と早いのでバグだったり質問は気軽に投げてみたらいいと思います。
僕も今回は優しく対応していただきました^^
と言うことでバグを見つけたらMLで報告。
バグかな?って思ったらMLを見てみる。
こんな流れで地雷を上手くさけて行ける気がしました。
と言うことでみなさんも是非ご参加ください!

FuelPHPの日本語グーグルグループ