現在、cakePHP3を勉強中。
エラーが発生した時に、どのファイルの何行目で問題が起こっているかが表示されなかったので、cakePHPの日本語サポートSlackで投稿したところ、chinpei215さんからアドバイスを頂いたのでメモ。
目次
エラーが発生したファイル名が表示されなくなった!?
Controllerとctpファイルを編集していて、URLを開いたところ’syntax error’。
どこかで間違った’=>’を使っているようです。cakePHP2の時はどのファイルの何行目というようなエラーが表示されていたような気がしたのですが、今回はどのファイルに問題があるか表示されません。
cakePHP日本語Slackで質問してみた
今後の学習を続けて行く上で、該当ファイル名がわからないのは非常に厳しいと思い、最近参加させていただいたcakePHPの日本語チャンネルに質問してみました。
すると、
1. バージョンを上げると解決できるかも。(私のバージョンは3.1.3 PHP 7.0.9)
2. toggle argumentsを押すと該当ファイルがわかるかも
とのアドバイスをいただきました。
toggle argumentsでファイル名が確認できた
結果として該当ファイルを確認することができましたので、やり方をご紹介。
まずは Cake\View\View->_evaluateのあたりをマウスでクリックします。
すると、このように詳細が現れます。右上に「toggle argument」とあるので、ここをクリック。
すると、無事にエラーが発生しているファイル名が表示されました。
これで、勉強を継続できます。
まとめ
今までプログラミングの学習は独学だった為に、問題がおこるとgoogle先生にきくしかありませんでしたが、cakePHPは日本語のSlackがあるのでとても心強いです。
とはいっても、まずはググって自分で解決法を探して、どうしてもというときだけヘルプを求めるようにしたいと思います。
2016/12/8追記
PHP7でエラーファイルが表示されない問題は、こちらで解決していました。
>Displaying the error message in PHP 7 by lorenzo · Pull Request #304 · cakephp/app · GitHub
修正方法は、
src/Template/Error/error500.ctp
このエラーテンプレートファイルにて、
<strong>SQL Query Params: </strong> <?= Debugger::dump($error->params) ?> <?php endif; ?> // ↑ 既存のコード // ↓ これを追加 <?php if ($error instanceof Error) : ?> <strong>Error in: </strong> <?= sprintf('%s, line %s', str_replace(ROOT, 'ROOT', $error->getFile()), $error->getLine()) ?> <?php endif; ?>
とすると、
のように、無事にエラー該当ファイル名が表示されるようになります。