Symfony2: вызов функции-члена toArray() для не-объекта

Hy,

У меня короткий вопрос о странном сообщении об ошибке, которое я получаю в моем проекте Symfony 2.

У меня есть класс сущностей User, который извлекает свои роли через Doctrine. Это работает отлично! Но...

Я хочу, чтобы User implement EquatableInterface, поэтому я добавил метод User::isEqualTo. Вот тут и возникает моя ошибка. Эта строка , особенно $this->getRoles() вызывает ошибку:

Symfony2: вызов функции-члена toArray() для не-объекта

Но то же самое использование функции toArray внутри User::getRoles() отлично работает в остальной части проекта. Так что я не понимаю, что здесь не так.

Может ли кто-нибудь помочь мне с этим? Любая помощь приветствуется!

Обновление 1

Глядя на журналы и используя вашу текущую справку, вот некоторые идеи:

  • $thisin getRoles всегда возвращает пользовательский класс сущности, так что ничего особенного, но
  • После каждого isEqualToвызова $this->rolesвозвращает null, после этого нет.

Обновление 2

Вот мои дальнейшие выводы:

  • Я добавил Константина is_nullcheck, но это не решает реальной проблемы.
  • Как я мог видеть в журналах при входе в систему, вызывается refreshUser, и все идеально. Роли найдены. После того, как RefreshUser isEqualTo запускается и внезапно $this->rolesстановится нулевым, а get_class($this->roles)возвращает пользовательский класс сущности (?!?!?) по сравнению с Doctrine\\ORM\\PersistentCollection.

Когда я добавляю роли в пользовательские (не) сериализованные методы, внутри этого метода isEqualTo кажется, что все в порядке. Он, наконец, захватывает роли, и я могу добавить к этому свою логику. Отлично! Но впоследствии Symfony выдает такие ошибки, как this или что. На мой взгляд, это как-то связано с сериализацией.

После некоторых чтений я добавил сериализацию в сущность роли, потому что это кажется стандартным способом. Сериализация пользователя и ролей сама по себе, а не (не)сериализация ролей внутри пользовательского класса. Но как только я удаляю роли из пользовательских методов сериализации, снова и снова возникает старая проблема, связанная с тем, что $this->roles всегда null при запуске isEqualTo. Каждый раз до и после все отлично, кроме вызова этого метода.

Я понятия не имею, что именно здесь происходит не так.

Есть идеи?


person andi1984    schedule 11.11.2014    source источник
comment
Каков результат get_class($this) на здесь.   -  person alu    schedule 12.11.2014
comment
Это всегда экземпляр класса сущностей пользователя, так что ничего особенного. Но всегда, когда вызывается isEqualTo, следующие $this-›roles равны нулю. После этого при других вызовах getRoles() это не...   -  person andi1984    schedule 14.11.2014
comment
Это полезно для Вы?   -  person alu    schedule 14.11.2014


Ответы (1)


Скорее всего, это вызвано тем, что $this->roles не заполняется в момент вызова getRoles(). Трудно сказать, что именно вызывает это, не просматривая ваш другой код. Простым решением было бы добавить проверку к вашему методу getRoles() в строке 138:

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

Но я не уверен, что это то, что вы хотите сделать, вы, вероятно, хотите выяснить, почему роли на самом деле пусты в этот момент.

person Konstantin Pereiaslov    schedule 12.11.2014
comment
Я добавил эту нулевую проверку, но это не решает проблему (см. мое второе обновление выше). - person andi1984; 16.11.2014