Symfony3 ClassNotFoundException Unraveled
사용자가 번들을 생성한 후 새 Symfony3 프로젝트를 시작하는 동안 두려운 ClassNotFoundException이 발생했습니다. 세부 사항 자세히 살펴보기:
당황스럽게도 액세스를 시도하고 있습니다. 127.0.0.1:8000에서는 다음과 같은 악명 높은 오류 메시지가 발생했습니다. "ClassNotFoundException: "PaulArtBundle" 네임스페이스에서 "PaulArtBundle" 클래스를 로드하려고 시도했습니다.
원인 공개
The 사용자는 코드를 꼼꼼하게 검토한 후 AppKernel.php에 다음이 포함되어 있음을 발견했습니다. 명령문:
public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), ...... new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Paul\ArtBundle\PaulArtBundle(), ]; }
PaulArtBundle은 다음과 같이 정의되었습니다.
<?php namespace Paul\ArtBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class PaulArtBundle extends Bundle { }
The Missing Link Discovered
많은 고민 끝에 발견되었습니다. generate:bundle 명령이 작곡가.json의 자동 로드 섹션을 업데이트하지 못했고 새 항목 추가를 무시했습니다. 네임스페이스.
해결 방법
문제를 해결하기 위해 사용자는 작곡가.json을 수동으로 편집하고 자동 로드 섹션을 업데이트했습니다.
# composer.json "autoload": { "psr-4": { "AppBundle\": "src/AppBundle", "Paul\": "src/Paul" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }
실행 중 Composer dumpautoload를 실행하고 서버를 다시 시작하면 문제가 해결되었습니다. ClassNotFoundException.
추가 참고
사용자는 새 번들이 기본 경로(/)를 재정의하여 예기치 않은 "Hello World" 인사말이 나타나는 것을 관찰했습니다.
흥미로운 통찰
이전에 Symfony 3.2, Composer.json 구성은 네임스페이스가 없는 PSR-4 매핑을 가정했습니다. 그러나 Symfony 3.2에서는 네임스페이스를 명시적으로 지정하는 보다 명시적인 접근 방식을 도입했습니다. 이러한 변화가 이 문제의 원인일 수 있습니다.
결론
generate:bundle 명령은 역사적으로 번들을 생성하는 쉬운 방법이었지만 최근 Symfony 자동 로딩 구성이 변경되었습니다. 원활한 번들 통합을 보장하려면 수동 개입이 필요합니다.
위 내용은 번들 생성 후 Symfony3에서 ClassNotFoundException이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!