찾다

 >  Q&A  >  본문

./foo/bar/utility/baz.php에 있는 Foo\Bar\Baz 클래스는 psr-4 자동 로딩 표준을 준수하지 않습니다. 줄넘기

Running Composer's updateinstallrequiredump-autoloadetc; 갑자기 노란색 지원 중단 알림을 받기 시작했습니다.

./foo/bar/utility/baz.php에 있는 FooBarBaz 클래스는 psr-4 자동 로딩 표준을 준수하지 않습니다. 뛰어 넘다.

Composer 2.0 이전에는 일반적으로 다음을 얻을 수 있었습니다.

지원 중단 알림: ./foo/bar/Baz.php에 있는 FooBarBaz 클래스는 psr-4 자동 로딩 표준을 준수하지 않습니다. Composer v2.0에서는 자동 로딩을 더 이상 사용할 수 없습니다. phar:///usr/local/bin/composer/src/Composer/Autoload/ClassMapGenerator.php:201

에서

이 알림이나 경고가 나타나는 이유는 무엇입니까? 이 상황에서 벗어나 Composer 2.0을 준비하려면 무엇이 필요합니까?

P粉052724364P粉052724364414일 전641

모든 응답(2)나는 대답할 것이다

  • P粉587780103

    P粉5877801032023-10-27 14:50:27

    제 경우 이 오류는 어떤 이유로든 업그레이드된 위치 ./foo/bar/baz.php에 나타나는 ./foo/bar/utility/baz.php 파일의 복사본으로 인해 발생했습니다. 후자를 제거한 후 오해의 소지가 있는 오류가 사라졌습니다. 소문자/대문자 경로 이름을 쳐다보는 데 몇 시간을 보냈지만 처음에는 파일에 문제가 없었습니다.

    회신하다
    0
  • P粉959676410

    P粉9596764102023-10-27 12:42:14

    이는 다양한 이유로 발생할 수 있습니다.

    오류 메시지에 주의를 기울이는 것이 중요합니다. 문제의 원인을 정확히 찾아내는 데에는 일반적으로 매우 정확합니다.

    경로 사례

    가장 일반적인 원인은 오류 메시지에서 알 수 있듯이 Bar.php경로 이름의 다양한 구성 요소의 대소문자가 정규화된 클래스 이름의 대소문자와 일치하지 않는다는 것입니다.

    일치하지 않습니다. foo/bar/Baz.phpAppBarBaz

    각 경로 구성 요소가 소유한 네임스페이스의 대소문자와 일치하도록 애플리케이션이나 패키지를 업데이트하세요.

    으아아아

    파일명과 클래스명 또는 네임스페이스 차이

    네임스페이스와 경로명을 매우 주의 깊게 확인하세요. 때로는 클래스(또는 네임스페이스)에 이름을 지정하지만

    디스크의 경로는 "foo-bar"입니다. 또는 어떤 이유로든 네임스페이스가 파일의 경로 이름과 정확히 일치하지 않는 경우도 있습니다. FooBar

    이렇게 하면 알림/경고도 실행됩니다. 파일 이름을 바꾸거나 클래스(또는 네임스페이스)의 이름을 바꿔야 합니다.

    일반적으로 경로나 파일을 변경하는 것이 훨씬 쉽습니다. 클래스나 네임스페이스 이름을 변경하려면 새 이름과 일치하도록 코드를 리팩터링해야 하지만 경로를 변경하면 리팩터링이 필요하지 않기 때문입니다.

    중첩된 네임스페이스 및 누락된 선언

    다음이 있다고 가정해 보세요:

    으아아아

    그리고

    src/Buzz 내부에 정의된 Dummy 클래스: Dummy,在内部定义src/Buzz 으아아아

    위 방법은 작동하지만 다른 방법처럼 알림을 표시합니다. 올바른 접근 방식은 다음과 같습니다.

    으아아아

    영향을 받는 클래스뿐만 아니라 이 클래스를 사용하거나 가져오는 다른 모든 파일도 변경해야 합니다. (예를 들어 이제

    을 선언합니다.) use FizzBuzzBuzzDummy;

    회신하다
    0
  • 취소회신하다