EC-CUBEのカスタマイズ中に「Expected to find class … while importing services from resource “app/Customize/*”, but it was not found!」というエラーが発生することがあります。この記事では、このエラーの原因と解決方法を解説します。

エラーメッセージの例

Expected to find class "Customize\Repository\HogeRepository" in file 
"/var/www/html/app/Customize/Repository/HogeRepository.php" while importing 
services from resource "../../../app/Customize/*", but it was not found! 
Check the namespace prefix used with the resource.

原因

このエラーは、Symfonyのサービスコンテナがapp/Customize配下のクラスを自動読み込みする際に、namespaceとファイルパスが一致しない場合に発生します。

主な原因は以下の通りです:

  1. namespaceの記述ミス
  2. クラス名とファイル名の不一致
  3. ディレクトリ構造とnamespaceの不一致
  4. 大文字・小文字の違い

解決方法

1. namespaceを確認する

ファイルの先頭にあるnamespaceが、ディレクトリ構造と一致しているか確認してください。

// ファイル: app/Customize/Repository/HogeRepository.php

// NG: namespaceが間違っている
namespace Customize\Entity;

// OK: ディレクトリ構造と一致
namespace Customize\Repository;

2. クラス名とファイル名を一致させる

PSR-4オートロード規約では、クラス名とファイル名は完全に一致する必要があります。

// ファイル名: HogeRepository.php

// NG: クラス名が違う
class Hoge_Repository { }

// NG: 大文字小文字が違う
class hogeRepository { }

// OK: ファイル名と完全一致
class HogeRepository { }

3. ディレクトリ構造を確認する

EC-CUBEのapp/Customize配下は、以下のようなディレクトリ構造が期待されています:

app/Customize/
├── Controller/     → namespace Customize\Controller
├── Entity/         → namespace Customize\Entity
├── Form/           → namespace Customize\Form
├── Repository/     → namespace Customize\Repository
├── Service/        → namespace Customize\Service
└── Twig/           → namespace Customize\Twig

4. キャッシュをクリアする

修正後はキャッシュをクリアしてください。

bin/console cache:clear --no-warmup
bin/console cache:warmup

よくあるミス

ミスの内容対処法
namespaceの末尾にセミコロンがないnamespace Customize\Repository;
useで自分自身をimportしている不要なuse文を削除
ファイルがUTF-8 BOM付きで保存されているBOMなしUTF-8で保存し直す
クラス定義がない(インターフェースのみ等)classキーワードでクラスを定義

まとめ

このエラーはnamespaceとファイル構造の不一致が原因です。ファイル名、クラス名、namespace、ディレクトリ構造がすべて一致しているか確認してください。特にコピー&ペーストでファイルを作成した場合は、namespaceの変更忘れに注意しましょう。

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

EC-CUBEに関するお問い合わせ


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

    EC-CUBEバージョンアップ