生活の跡

個人的な備忘録

fuelPHPエラー:Cannot use object of type Fuel\Core\Request as array

概要

fuelPHP で "Cannot use object of type Fuel\Core\Request as array"というエラーが出て困った。
Requestオブジェクトを配列みたいに使わないでね、って言われてます。

エラーになった箇所のコード

$tweets = \Request::forge('api/twitter/get_tweets, false)->execute()
$tweet_example => $tweets['statuses'][0]['text'] //この行でエラーになる

ちなみに、上記のRequest::forge(...)では、api モジュールの twitter クラスの get_tweets メソッドの返り値を受け取っています。
get_tweets メソッドでは連想配列の形式で return していますが、上記1行目の$tweetsは Request オブジェクトになっています。

状況

上記のコードの詳細はさておき、Request::forge(...)->execute()で取得できるのは Request オブジェクトです。
それを連想配列みたいに扱おうとしたのでエラーになっています。

解決方法

Request オブジェクトから Response を抜き出し、さらに body 部を抜き出します。Request::forge(...)->execute()->response()->body()という感じです。

$tweets = \Request::forge('api/twitter/get_tweets.$val, false)->execute()->response()->body();
$tweet_example => $tweets['statuses'][0]['text'] 

get_tweets メソッドで return した連想配列の形で、1行目の$tweetsに代入することができました!

補足

同じエラーに遭遇した方が、Request オブジェクトの中身を print_r で確認するという記事を書いていました。
https://catherine87.com/archives/287

ただ、私の場合はバッチ処理(fuelPHP の Task)内のエラーだったため、画面出力での確認ができませんでした。
\Log::debug(serialize($tweets))で文字列にした内容をログ出力したりしましたが、結構苦労しました。。

なお、Request クラスの公式ドキュメントはこちらです。
Request - クラス - FuelPHP ドキュメント