Ошибка Doctrine 2 с FOS\UserBundle. Воспроизводится на PHP 5.6 при использовании FOS/UserBundle для Symfony и старой версии доктрины 2.3.х.
Лог такой:
Warning: Erroneous data format for unserializing 'App\UserBundle\Entity\User' in project/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
Я нашел два способа исправления.
Обновить версию Doctrine
Обновить Doctrine до версии 2.4.x или выше. Однако не всегда это допустимо, в силу того, что что-нибудь может отвалиться. А исправить нужно здесь и сейчас 🙂
Изменить способ создания объекта без конструктора
Собственно причина проблемы — это способ, который использует Doctrine для создания объекта без вызова конструктора — десериализация данных.
Можно исправить метод newInstance()
и создавать объект через рефлексию.
function newInstance()
{
if ($this->_prototype === null) {
if (method_exists($this->reflClass, 'newInstanceWithoutConstructor')) {
$this->_prototype = $this->reflClass->newInstanceWithoutConstructor();
} else {
$this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
}
}
return clone $this->_prototype;
}
Я тоже частенько сталкиваю с подобного рода ошибками. Благо, что есть люди, которые помогают с их решить. 🙂