2017-12-20 21 views
2

Symfony 3 응용 프로그램을 개발 중입니다. 심포니 프로파일 로그 말해 :ORM 엔터티에서 서비스 자동 등록 오류가 발생했습니다.

/** 
* @ORM\Entity 
* @ORM\Table(name="category") 
*/ 
class Category 
{ 
... 

가 어떻게이 문제를 제거해야합니다

Relying on service auto-registration for type "App\Entity\SubDir\Category" 
is deprecated since version 3.4 and won't be supported in 4.0. 
Create a service named "App\Entity\SubDir\Category" instead. 

그러나,이 간단한 ORM 콩은? services.yaml에 ORM 엔티티를 서비스로 선언해야합니까? 그렇다면 어떻게?

업데이트 사실, 내 엔티티는 하위 디렉토리에 있습니다. 나는 내 질문을 수정했다. 내 service.yaml에서

는, 나는 시도했다 :

App\: 
    resource: '../src/*' 
    exclude: '../src/{Entity,Repository,Tests,Entity/SubDir}' 

...하지만 아무 소용.

+0

엔터티의 위치를 ​​services.yml에서 무시 된 것으로 표시하면 안됩니까? – svgrafov

+0

App과 AppBundle이 네임 스페이스에 대해 궁금합니다. Flex를 사용하여 설치하지 않는 한 S3는 기본적으로 AppBundle을 사용합니다. – Cerad

+0

나는 그것을 시도 할 수있다. 그러나 나는 그것들을 무시 된 것으로 표시하기 위해 어떻게해야합니까? + 랩톱에서 응용 프로그램을 실행하고 있습니다. – JVerstry

답변

2

생성자 인수로 엔터티를 사용하는 서비스 자동 등록 클래스가 있습니까?

여기에서 문제가 발생합니다.

관련 클래스가 실제로 서비스인지 또는 인스턴스를 항상 직접 만드는 일반 객체인지 스스로에게 질문해야합니다. 다음

AppBundle\: 
    resource: '...' 
    # you can exclude directories or files 
    # but if a service is unused, it's removed anyway 
    exclude: '../../{Entity,PathToYourNotService}' 

또는 설정할 수 있습니다 예를 들어 당신이 좋아하는 글로브 패턴을 통해이 클래스를 제외 할 수 있습니다

:이 컨테이너를 통해 서비스로 사용하지 않을 경우

당신은 두 가지 옵션이 있습니다 매개 변수를 설정하십시오.

parameters: 
    container.autowiring.strict_mode: true 

이 옵션을 사용하면 컨테이너가 서비스로 사용할 수없는 인수로 서비스 클래스를 만들려고 시도하지 않고 결정적 오류가 발생합니다. 이 SF4의 기본 설정입니다

바로이 오류가 생성자에서 페이로드로 엔티티를 취 사용자 정의 이벤트 클래스가 될 것입니다 트리거하는 클래스의 좋은 예 : 이제

namespace AppBundle\Event; 

use AppBundle\Entity\Item; 
use Symfony\Component\EventDispatcher\Event; 

class ItemUpdateEvent extends Event 
{ 
    const NAME = 'item.update'; 

    protected $item; 

    public function __construct(Item $item) 
    { 
     $this->item = $item; 
    } 

    public function getItem() 
    { 
     return $this->item; 
    } 
} 

경우이 파일 ISN 컨테이너가 자동으로 서비스로 등록하려고 시도 할 것입니다. 엔티티가 제외되었으므로 엔티티를 자동 엮을 수 없습니다. 그러나 3.4에는이 경고가 표시되는 대체 기능이 있습니다. strict_mode가 활성화되면 이벤트는 서비스로 사용할 수 없게되며 이벤트를 하나로 사용하려고하면 오류가 발생합니다.

+0

엄격 모드 설정이 작업을 완료 한 것으로 보입니다. – JVerstry

+0

잘 알고 있습니다. 관심이 있으시면 작은 예제 수업으로 마지막 편집을하는 것이 정확히 어떨까요? – Joe