2017-12-29 6 views
0

제 symfony 프로젝트에는 두 개의 번들이 있습니다. 내 첫 번째 번들 (Bundle1)은 기본 번들이고 두 번째 번들 (Bundle2)은 일부 서비스를 저장하는 데 사용됩니다. 여기 번들 서비스 - 네임 스페이스에서 클래스를로드하려고 시도했습니다.

내 service.yml (Bundle2)입니다 :

services: 
    sc_ezpublish_helpers.generic_find: 
     class: SC\EzPublishHelpersBundle\Helper\GenericFindHelper 

그리고 Bundle1에서이 같은 내 서비스 전화를 사용

$findHelper = $this->get('sc_ezpublish_helpers.generic_find'); 

캐시를 제거한 후 내가 가진이 오류 :

"SC \ EzPublishHelpersBundle \ Helper"네임 스페이스에서 "GenericFindHelper"클래스를로드하려고 시도했습니다. 다른 네임 스페이스에 "사용"문을 잊어 버렸습니까?

스택 추적

에서 응용 프로그램/캐시는/dev/appDevDebugProjectContainer.php 라인에서 20,582 -

여기
*/ 
protected function getScEzpublishHelpers_GenericFindService() 
{ 
    return $this->services['sc_ezpublish_helpers.generic_find'] = new \SC\EzPublishHelpersBundle\Helper\GenericFindHelper($this->get('ezpublish.signalslot.repository'), $this->get('ezpublish.config.resolver.core')); 
} 
/** 

는 composer.json

"autoload": { 
    "psr-4": { 
     "": "src/" 
    }, 
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] 
}, 

내 자동로드입니다 그리고 여기 Bundle2 구조가 있습니다

src/ 
├── SC 
│   └── EzPublishHelpersBundle 
│    ├── DependencyInjection 
│    │   ├── Configuration.php 
│    │   └── SCEzPublishHelpersExtension.php 
│    ├── Helpers 
│    │   └── GenericFindHelper.php 
│    ├── Resources 
│    │   └── config 
│    │    └── services.yml 
│    └── SCEzPublishHelpersBundle.php 

아이디어가 있으십니까? 내가 뭔가 잊었 니?

감사합니다.

+0

자동로드 문제와 비슷합니다. 폴더 구조가 네임 스페이스와 일치하는지 확인하고 composer.json의 autoload 섹션을 여기에 추가 할 수 있습니까 – dbrumann

+0

아마도 내 번들의 이름이 변경 되었나요? 그러나 나는 도처에서 수색했고 뭔가를 잊었을 때 찾을 수 없습니다 ... 그리고 내 자동로드로 내 메시지를 업데이트했습니다 – ReaperSoon

+0

그 경우 폴더 구조를 보여주십시오. 파일은'src/SC/EzPublishHelpersBundle/Helper/GenericHelper.php'에 위치해야합니다. – dbrumann

답변

1

디렉토리 이름과 네임 스페이스가 일치하지 않습니다. 귀하의 폴더 구조에서 그것은 Helpers (복수형)이라고하고 네임 스페이스에는 Helper을 사용합니다.

"autoload": { 
    "psr-4": { 
     "SC\\EzPublishHelpersBundle\\Helper\\": "src/SC/EzPublishHelpersBundle/Helpers/", 
     "": "src/" 
    } 
} 

또는 (아마도 더 쉽고 일반적인 방법) 도우미에 폴더의 이름을 바꾸을 : 오토로더는 당신이 당신의 자동로드에서이 불일치를 지정해야 하나, 그래서 클래스 명에 일치하도록 폴더 이름을 사용합니다.

그런데 클래스 이름도 마찬가지입니다. GenericHelper 클래스가 GenericFindHelper.php 파일에 있으면 자동 로더가 파일 이름을 클래스 이름과 일치시킬 수 없습니다. 따라서 이름과 네임 스페이스를 지키는 것이 절대적으로 중요하다면 파일의 이름을 바꾸거나이 특정 파일에 대해 classmap-autoloader를 사용하십시오.

편집 : 잘못된 클래스 이름이 내 답장의 오타 일뿐입니다. 귀하의 예제에서 그것은 일치합니다.

+0

나는 그것을 보지 못했지만 대답 주셔서 감사합니다. 오늘 밤 시험해보고 모든 것이 괜찮은지 말해 줄 것입니다. – ReaperSoon

+0

괜찮습니다. 고마워요. 나는 수시로 확인하고 불일치를 보지 못했습니다 ... 고마워 :) – ReaperSoon

관련 문제