【EC-CUBE3】エラーメッセージとその原因について

EC-CUBE3になって大きく変わった事というと
やはりフレームワークが採用されたという事でしょうか?
フレームワークを採用する事で
ある程度、ソースの記述や実装方法を統一する事ができる為、
実装されたソースの再利用しやすさ等のメリットがあります。

ただ、自分にとって、EC-CUBE3を色々カスタマイズする上で
一番苦労している点でもあります。

フレームワークを採用した場合、
他のプロジェクトでもそうでしたが、
だいたいそのプログラムに精通している技術者ほど、
ハマる傾向があるように思われます。
あくまで個人的な見解ですが、
EC-CUBE2の技術者はPHPをバリバリ利用されていた方が多いのではないでしょうか?

私は色々ハマる原因と思われる点に、エラーメッセージがあると考えています。
通常、PHP本体の開発であれば、記述ミスがあった場合、
そのソースの行までエラーメッセージが教えてくれますが、
フレームワークを利用している場合、
実際に記述ミスしている箇所では無く、全く異なる箇所でエラーメッセージが表示されます。
これはフレームワーク本体が、各々のソースを読み込んで(インスタンス等で)メソッド等を実行する為、
仕方ないと思いますが、
かなり原因を突き止めるのに苦労します。
フレームワークにある程度、慣れてくれば、
このあたりが怪しいなど目星をつける事が出来ますが、
さわり始めの頃はストレスで頭がおかしくなりそうになります。

ここで挫折してしまう人もいるのでは無いでしょうか?
(VisualStadioに.netが出てきた時にオブジェクト指向はよく分からん!!と
言っていた人の話を思い出します。)

なので、このブログではしばらく私の開発中に/app/log/site*****.logに出力されたログとエラー原因、
対応した内容を紹介していきたいと思います。

因みにEC-CUBE3で多いエラーとしては、
画面にいきなり「システムエラーが発生しました。」と表示される場合と、
画面が真っ白になる場合があると思います。
画面が真っ白になる場合は、上記エラーログも出力されていない事が多いと思いますが、
ExceptionとしてキャッチできないPHP自身のエラーが出力されており、
WebServerのエラーログには何か出力されていると思います。
この場合、.htaccessやphp.iniで「display_errors」を変更される方もいらっしゃると思いますが、
EC-CUBEの場合、それだけではエラーは画面に表示されません。
原因は、/html/index.php 29行目に以下の記述があり、「display_errors」を無効にしています。

その為、

に変更すれば、PHPエラーは画面に表示されるようになります。
本番運用している環境での表示はNG化と思いますが、
開発中に画面が真っ白になってお困りの方は、この設定を変更してみてください。

それでは、以下、エラーの紹介となります。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

こちらは******.twigが見つからないというエラーになります。
コントローラークラスを定義しているPHPファイルの
$app->renderの第1引数に渡しているパスを確認してください。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

こちらはFormType関連のクラスを定義するPHPファイルで
FormBuilderInterfaceに入力項目の制限を指定する際のmin、maxに空文字を渡した場合に発生しました。
以下の記述の場合、$app[‘stext_len’]が$app[‘config’][‘stext_len’]で記述する必要がありました。

今回はLength制約の箇所のエラーでしたが、
Symfony\Component\Validator\Exception\に続きエラーログの場合、
FormTypeにかかわるエラーの可能性が高いと思います。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

ServiceProviderルーティングに追加したコントローラーへのパスに誤りがある場合に
発生したエラーになります。
以下のRequestAControllerが存在しないファイル名になっていました。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
::indexのメソッド名が間違っている場合は、以下のようなエラーが出力されます。

以上、いくつか実際に開発中に表示されたエラーメッセージと
その原因の紹介になります。
今後も発生したエラーメッセージとそれに対応する方法を紹介していきたいと思います。