복붙노트

번들 생성 후 Symfony3 ClassNotFoundException

PHP

번들 생성 후 Symfony3 ClassNotFoundException

Symfony에서 새로운 3.3 프로젝트를 시작하고 평소와 같이 시작했습니다.

1.) 새 프로젝트 만들기 : 심포니 new ArtProject

2.) 새로운 번들 만들기 : php app / console generate : bundle (Paul / ArtBundle, yml, src /)

그런 다음 로컬 서버를 실행하고 127.0.0.1:8000을 열면이 아름다운 메시지가 표시됩니다.

나는 이상한 일이 벌어지고있는 이유를 알지 못합니다. 번들을 만들기 전에 오류가 없었습니다. 심포니의 전형적인 시작 페이지를 보았습니다.

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ......
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new Paul\ArtBundle\PaulArtBundle(),
    ];
}
<?php

namespace Paul\ArtBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class PaulArtBundle extends Bundle
{
}

어떤 아이디어가 거기에서 계속되고 있냐? 나는 물건을 바꾸지 않았다, 나는 단지이 명령을 달리게했다.

해결법

  1. ==============================

    1.방금 S3.3.4 (이 글을 쓰는 시점에서 최신 버전)의 새로운 복사본을 설치했습니다 :

    방금 S3.3.4 (이 글을 쓰는 시점에서 최신 버전)의 새로운 복사본을 설치했습니다 :

    composer create-project symfony/framework-standard-edition s334 "3.3.4"
    bin/console generate:bundle
    Share across multiple apps: yes
    namespace: Paul\ArtBundle
    bundle name: PaulArtBundle
    Target Directory: src/
    

    브라우저를 새로 고침하고 클래스를 찾았음에도 메시지가 없습니다.

    generate : bundle 명령은 새로운 네임 스페이스가 도입되었을 때 composer.json의 자동로드 섹션을 업데이트하지 않습니다. composer.json 및 다음을 편집하십시오.

    # composer.json
    "autoload": {
        "psr-4": {
            "AppBundle\\": "src/AppBundle",
            "Paul\\": "src/Paul"
        },
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
    },
    

    그런 다음 실행

    composer dumpautoload
    

    그리고 서버를 다시 시작하십시오 (어쩌면). 문제가 발견되지 않은 번들 클래스를 수정해야합니다.

    나는 generate : bundle 명령을 사용하지 않았습니다. 표준이 AppBundle 아래에 모든 것을 두는 것이 꽤 오래 되었기 때문에 이것이 얼마나 오래 "깨져 있는지"는 모르겠습니다. 그러나 지난 주에 적어도 세 가지 질문이 있었는데 그것이 최근의 일 이었음을 나타냅니다.

    그리고 그런데, 내가 브라우저를 새로 고쳤을 때 나는 나를 위해 나를 조금 던진 "Hello World"를 얻었다. 새 번들이 / 일종의 / route를 오버라이드시킨다.

    그리고 왜 이런 일이 일어나기 시작했는지 궁금해하는 사람이 있다면 Symfony 3.2가

    #composer.json
    "psr-4": { "": "src/" },
    To
    "psr-4": { "AppBundle\\": "src/AppBundle" },
    

    개별 네임 스페이스의 철자가 "더 좋을 것"이라고 생각할지라도 언제든지 다시 변경할 수 있습니다. 확실하지 않다.

    자세한 내용은 다음과 같습니다. https://github.com/symfony/symfony-standard/issues/1098

    유지 관리자가 기존 명령을 깨는 것보다 속도가 약간 개선 된 것 같습니다. 오 잘. Symfony Flex는 모든 것을 다시 훌륭하게 만들어야합니다.

  2. ==============================

    2.네임 스페이스가있는 여러 프로젝트에서 사용하기 위해 번들을 생성하는 경우 다음과 같이 composer.json에 추가해야합니다.

    네임 스페이스가있는 여러 프로젝트에서 사용하기 위해 번들을 생성하는 경우 다음과 같이 composer.json에 추가해야합니다.

    번들 이름이 CompanyFooBundle이고 이름 공간이 Company \ Bundle \ FooBundle 인 것으로 가정하면 작성자 autoload 섹션은 다음과 같아야합니다.

    ...
    "autoload": {
        "psr-4": {
            "Company\\Bundle\\FooBundle\\": "src/Company/Bundle/FooBundle"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
    ...
    
  3. ==============================

    3.이것은 나를 위해 작동합니다 :

    이것은 나를 위해 작동합니다 :

    다음과 함께 번들 생성

    그리고 항상 단계를 따르십시오. 이제 작곡가에서 원하는 것을하십시오. 라인이있는 json 파일

    "AppBundle\\": "src/AppBundle"
    

    ""로 대체 : "src /"또는 번들을 추가하십시오 (예 : "BackendBundle \\": "src / BackendBundle").

    여기에 새로운 부분이 있습니다.

    php ./bin/composer.phar 업데이트

  4. from https://stackoverflow.com/questions/44946911/symfony3-classnotfoundexception-after-bundle-creation by cc-by-sa and MIT license