2014-11-11 1 views
2

숨바꼭질에 멤버 함수 toArray()를 호출합니다.Symfony2는 : <p></p> 내가 내 <em>심포니 2</em> 프로젝트를 얻을 이상한 오류 메시지에 대한 짧은 질문을했습니다, 비 객체

나는 교리을 통해 역할을 검색하는 엔티티 클래스 User을 보유하고 있습니다. 이것은 완벽하게 작동합니다! 하지만 ...

User implement EquatableInterface을 보내 주었으므로 User::isEqualTo 메서드를 추가했습니다. 이것은 내 오류가 발생하는 곳입니다.

Symfony2: Call to a member function toArray() on a non-object

그러나 User::getRoles() 내부 같은 toArray 기능 사용이 프로젝트의 나머지 부분에 잘 작동 : This line, 특히 $this->getRoles()는 오류의 원인이된다. 그래서 나는 여기서 잘못된 것을 얻지 못합니다.

누군가 나를 도와 줄 수 있습니까? 어떤 도움을 주셔서 감사합니다!

업데이트 1

로그에 상대하여 현재 도움말을 사용하여, 여기에 몇 가지 통찰력과 같습니다

  • $this 엔티티 사용자 클래스 반환 항상 getRoles에가, 그래서 아무것도 특별한, 그러나
  • isEqualTo 전화 후에 $this->rolesnull을 반환하며, 이후는 그렇지 않습니다. 여기에 2

업데이트 내 더 통찰력이다 : 나는 Konstantinis_null 검사를 추가했습니다

  • 하지만 실제 문제가 해결되지 않습니다.
  • 로그인하는 동안 로그에서 볼 수 있듯이 refreshUser이 호출되며 모든 것이 완벽합니다. 역할이 있습니다. refreshUser isEqualTo이 실행 된 후 갑자기 $this->roles이 null이되고 get_class($this->roles)Doctrine\\ORM\\PersistentCollection과 비교하여 사용자 엔터티 클래스 (?!?!?)를 반환합니다.

사용자의 (직렬화되지 않은) 메서드에 역할을 추가하면이 isEqualTo 메서드 내에서 모든 것이 잘된 것처럼 보입니다. 그는 마침내 역할을 잡아 내 논리에 추가 할 수 있습니다. 벌금! 하지만 나중에 Symfony는 this 또는 that과 같은 오류를 던지고 있습니다. 내 pov에서 그것은 일련 화와 관련이있다.

일부 읽기 후에는 표준 엔티티 인 것처럼 역할 엔티티에 일련 번호를 추가했습니다. 사용자 클래스 내에서 역할을 직렬화하지 않고 사용자와 역할을 독자적으로 직렬화합니다. 그러나 사용자의 직렬화 메소드에서 역할을 제거하자마자 isEqualTo가 실행될 때 $this->roles과 관련된 오래된 문제가 항상 null입니다. 이 메서드 호출을 제외하고 모든 것이 훌륭합니다.

나는 정확하게 여기에서 잘못 가고있는 어떤 단서도 가지고 있지 않다.

아이디어가 있으십니까?

+0

[here] (https://github.com/andi1984/calendar-app/blob/develop/src/Andi1984/CalendarBundle/Entity/User.php#L139)의'get_class ($ this)'의 결과는 무엇입니까?). – alu

+1

항상 사용자 엔티티 클래스의 인스턴스이므로 아무 것도 특별하지 않습니다. 하지만 항상 isEqualTo가 호출 될 때 다음 $ this-> roles는 null입니다. 그 후 다른 getRoles() 호출에서는 그렇지 않습니다 ... – andi1984

+0

[It] (http://stackoverflow.com/questions/4773976/doctrine2-constructor-not-called-when-using-em-find-how- 로드 엔티티) 도움이 될까요? – alu

답변

2

이 오류는 getRoles() 호출시 $this->roles이 채워지지 않은 것이 원인 일 가능성이 큽니다. 다른 코드를 사용하지 않고 정확히 원인을 밝히기 란 어렵습니다. 쉬운 솔루션은 라인 (138)에 당신 getRoles() 방법에 검사를 추가하는 것입니다 :

if ($this->roles === null) { 
    return null; 
} 

하지만 당신은 아마 역할이 그에서 실제로 비어있는 이유를 파악하려면, 당신이 원하는 무엇을 그건 잘 모르겠어요 순간.

+1

이 null 체크를 추가했지만 문제가 해결되지 않습니다 (위의 두 번째 업데이트 참조). – andi1984

관련 문제