Symfony2: вызов функции-члена toArray() для необъекта
Hy,
У меня короткий вопрос о странном сообщении об ошибке, которое я получаю в своем проекте Symfony 2.
У меня есть класс сущности User
который получает свои роли через доктрину. Это работает отлично! Но...
Я хочу позволить User implement EquatableInterface
так что я добавил User::isEqualTo
метод. Это где моя ошибка происходит. Эта линия, особенно $this->getRoles()
вызывает ошибку:
Symfony2: вызов функции-члена toArray() для необъекта
Но то же самое toArray
использование функции внутри User::getRoles()
отлично работает на остальной части проекта. Так что я не понимаю, что здесь не так.
Может ли кто-нибудь помочь мне с этим? Любая помощь приветствуется!
Обновление 1
Просматривая журналы и используя вашу текущую помощь, вот несколько идей:
$this
вgetRoles
всегда возвращает класс пользователя сущности, так что ничего особенного там нет, но- После каждого
isEqualTo
вызов,$this->roles
возвращаетсяnull
после этого нет.
Обновление 2
Вот мои дальнейшие идеи:
- Я добавил Konstantin Pereiaslov
is_null
проверьте, но это не решает актуальную проблему. - Как я мог видеть в журналах во время входа в систему,
refreshUser
называется и все идеально. Роли найдены. После обновления пользователяisEqualTo
уволен и вдруг$this->roles
становится нулевым иget_class($this->roles)
возвращает класс сущности пользователя (?!?!?) по сравнению сDoctrine\\ORM\\PersistentCollection
,
Когда я добавляю роли в методы сериализации пользователя (не), кажется, все в порядке isEqualTo
метод. Наконец он берет роли, и я могу добавить к этому свою логику. Отлично! Но потом Symfony выдает ошибки, такие или те. В моем pov это как-то связано с сериализацией.
После некоторых чтений я добавил сериализацию к объекту роли, потому что это кажется стандартным способом. Сериализация пользователя и ролей самостоятельно, а не (не) сериализация ролей внутри пользовательского класса. Но как только я удаляю роли из методов сериализации пользователя, старая проблема снова и снова возникает $this->roles
всегда null
когда isEqualTo уволен. Каждый раз до и после все замечательно, кроме вызова этого метода.
Я понятия не имею, что здесь происходит.
Любая идея?
1 ответ
Скорее всего это вызвано $this->roles
не заполняется в момент вызова getRoles(). Трудно сказать, что именно вызывает это, не проходя через ваш другой код. Простым решением было бы добавить чек к вашему getRoles()
метод в строке 138:
if ($this->roles === null) {
return null;
}
Но я не уверен, что это то, что вы хотите сделать, вы, вероятно, хотите выяснить, почему роли на самом деле пусты в данный момент.