cakePHP3でエラーが発生したファイル名が表示されないのは?

現在、cakePHP3を勉強中。

エラーが発生した時に、どのファイルの何行目で問題が起こっているかが表示されなかったので、cakePHPの日本語サポートSlackで投稿したところ、chinpei215さんからアドバイスを頂いたのでメモ。

目次

エラーが発生したファイル名が表示されなくなった!?

Controllerとctpファイルを編集していて、URLを開いたところ’syntax error’。

cakePHP3

どこかで間違った’=>’を使っているようです。cakePHP2の時はどのファイルの何行目というようなエラーが表示されていたような気がしたのですが、今回はどのファイルに問題があるか表示されません。

cakePHP日本語Slackで質問してみた

今後の学習を続けて行く上で、該当ファイル名がわからないのは非常に厳しいと思い、最近参加させていただいたcakePHPの日本語チャンネルに質問してみました。

cakePHP3

すると、

1. バージョンを上げると解決できるかも。(私のバージョンは3.1.3 PHP 7.0.9)
2. toggle argumentsを押すと該当ファイルがわかるかも

とのアドバイスをいただきました。

toggle argumentsでファイル名が確認できた

結果として該当ファイルを確認することができましたので、やり方をご紹介。

cakePHP3

まずは Cake\View\View->_evaluateのあたりをマウスでクリックします。

cakePHP3

すると、このように詳細が現れます。右上に「toggle argument」とあるので、ここをクリック。

cakePHP3

すると、無事にエラーが発生しているファイル名が表示されました。

これで、勉強を継続できます。

まとめ

今までプログラミングの学習は独学だった為に、問題がおこると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; ?>

とすると、

のように、無事にエラー該当ファイル名が表示されるようになります。