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とファイルパスが一致しない場合に発生します。
主な原因は以下の通りです:
- namespaceの記述ミス
- クラス名とファイル名の不一致
- ディレクトリ構造とnamespaceの不一致
- 大文字・小文字の違い
解決方法
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-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。
EC-CUBEゴールドパートナー