概要
表題でオチまで述べていますが、エラー内容から原因を特定するまでに時間がかかったので一応メモしておきます。
環境
FuelPHP 1.8.2
エラー内容
キャプチャ
テキスト
ErrorException [ Fatal Error ]: Method Fuel\Core\View::__toString() must not throw an exception, caught ParseError: syntax error, unexpected 'echo' (T_ECHO)
原因が特定しにくかった理由
まず、エラーメッセージのMethod Fuel\Core\View::__toString() must not throw an exception
に気を取られました。toString()に例外を投げてはならぬ、と言われても意図的に例外を投げる処理は書いていないし。。なので、とりあえず無視。
さらに、エラーになった箇所の特定がわかりにくかったです。0行目がおかしいと言われても。いろいろ試した結果、template.php の$content
部分に指定しているビューファイルで引っかかっていることがわかりました。具体的には、コントローラで$this->template->content = View::forge('(※)', $data);
としていた箇所の(※)に該当するビューファイルです。
原因のビューファイルの内容を一部消しながらエラーになる箇所を探したところ、エラーの原因になっている行まで特定できました。文末に全角スペースが入っていました。
おわりに
syntax error でも、ParseError: syntax error, unexpected ':', expecting end of file
のような場合はバグを見つけやすいです。予期せぬコロンがありますよ、って言っているので。ただ全角スペースが入ってしまうとParseError: syntax error, unexpected 'echo' (T_ECHO)
になってしまうんですね。なんですか(T_ECHO)って。