EC-CUBE3のTwigテンプレートで{{ Order.order_date }}のように書き受注日時を表示しようとすると、Catchable Fatal Errorが出ることがあります。
Twig_Error_Runtime in Template.php line 182:
An exception has been thrown during the rendering of a template (“Catchable Fatal Error: Object of class DateTime could not be converted to string”) in
これはDateTimeオブジェクトをテキストとして出力できませんよというエラーですので、
{{ Order.order_date|date(‘Y-m-d’) }}のように「date(‘Y-m-d’)」というmodifierをつけてやると正常に出力されます。
‘Y-m-d’はYear-month-dayのフォーマットを現しており、他にも様々なフォーマットが利用可能です。
(参考) http://php.net/manual/ja/function.date.php
なぜDatetimeオブジェクトが生成されているのか?
MySQLなどでは日付は文字列で保存されているので、疑問に感じるのも当然です。
これはEC-CUBE3が内部で使用しているORM、DoctorineがデータをPHPのDatetime型オブジェクトに自動変換していることが理由です。
OrderエンティティのYAMLをのぞいてみると、受注日時のカラムはtype: datetimeと指定しています。
この部分でDatetimeオブジェクトを指定しています。
order_date: type: datetime nullable: true
エンティティを定義しているYAMLファイルをのぞいてみると他にも様々な設定があっておもしろいです。
EC-CUBE3は奥が深いですね。Symphonyフレームワークを学ぶとEC-CUBE3に強くなるのでおすすめです!
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。