EC-CUBE3で開発しているとき、新規Entityを作成し別のEntity(Customer)のyamlから参照しようとするとのMappingExceptionが起こってしまいました。

MappingException in MappingException.php line 740:The target-entity Eccube\Entity\PrintLogo cannot be found in ‘Eccube\Entity\Customer#TestEntity’.

原因が分かったのは1時間後。class_exists(“Entityのクラス名”)がfalseを返している・・・。
ルートにあるautoload.php内をのぞいてみるとこんな記述が。

// autoloader cache
if (extension_loaded('apc') && ini_get('apc.enabled')) {
    $apcLoader = new Symfony\Component\ClassLoader\ApcClassLoader(sha1(__FILE__), $loader);
    $apcLoader->register();
    $loader->unregister();
} elseif (extension_loaded('wincache') && ini_get('wincache.fcenabled')) {
    $winCacheLoader = new Symfony\Component\ClassLoader\WinCacheClassLoader(sha1(__FILE__), $loader);
    $winCacheLoader->register();
    $loader->unregister();
}

つまりオートローダーごとapcのキャッシュに捕まっていたわけですね。
この部分を対処して解決しました。

このあたりのコード変更したら毎回apcのキャッシュクリアしたほうがいいのでしょうか?

日本発!ECオープンプラットフォーム「EC-CUBE」 EC-CUBEゴールドパートナー EC-CUBEは株式会社イーシーキューブの商標です

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


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

    EC-CUBEバージョンアップ