An exception has been thrown during the rendering of a template (“Catchable Fatal Error: Object of class __PHP_Incomplete_Class could not be converted to string”) in “default_frame.twig” at line 67.

管理画面のカスタマイズのため、MemberエンティティにOneToManyの関連を付け足すと
Catchable Fatal Errorではまりました。

$app[“user”]が__PHP_Incomplete_Classになってしまったため、Memberオブジェクトにアクセスできなくなってしまったようです。

原因は$app[‘user’]がセッションに保存されていること。
セッションから取り出すタイミングではまだMemberエンティティの定義が読み込まれていないことが原因のようです。
(DB問い合わせじゃないのか・・・)

少し探すと対処法がオフィシャルのGithubに掲載されていました。
https://github.com/EC-CUBE/ec-cube/issues/1680

この通りにApplicationクラスを書き換えるとエラーは出なくなりました。

     public function initSession()
     {
+        ini_set('unserialize_callback_func', 'Eccube\Application::proxymissing');
         $this->register(new \Silex\Provider\SessionServiceProvider(), array(
             'session.storage.save_path' => $this['config']['root_dir'].'/app/cache/eccube/session',
             'session.storage.options' => array(
@@ -997,4 +998,13 @@ class Application extends ApplicationTrait
         }
         return true;
     }
+
+    public static function proxymissing( $name ) {
+        $proxyDir = __DIR__.'/../../app/cache/doctrine';
+        if ( strpos($name, 'DoctrineProxy\__CG__\Eccube\Entity') !== false) {
+            $name = str_replace('\\', '', $name);
+            $name = str_replace('DoctrineProxy', '', $name);
+            require $proxyDir.'/'.$name.'.php';
+        }
+    }
日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

EC-CUBEカスタマイズに関するお問い合わせはこちら


    [重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。

    EC-CUBEバージョンアップ