$ php app/console fos:user:create Please choose a username:admin Please choose an email:admin21@dwq Please choose a password:admin123 Created user admin $ php app/console fos:user:promote Please choose a username:admin Please choose a role:ROLE_SUPER_ADMIN PHP Warning: Erroneous data format for unserializing 'Workshop\Bundle\BackendBundle\Entity\User' in E:\_My_File_____\_work\MyCode\myCode\phpworkspace \symfony-workshop\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php on line 833 PHP Notice: unserialize(): Error at offset 52 of 53 bytes in E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony-workshop\ve ndor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php on line 833 PHP Fatal error: Uncaught Error: __clone method called on non-object in E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony- workshop\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php:837 Stack trace: #0 E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony-workshop\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(2393): Do ctrine\ORM\Mapping\ClassMetadataInfo->newInstance() #1 E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony-workshop\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(2474): Do ctrine\ORM\UnitOfWork->newInstance(Object(Doctrine\ORM\Mapping\ClassMetadata)) #2 E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony-workshop\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\Simpl eObjectHydrator.php(135): Doctrine\ORM\UnitOfWork->createEntity('Workshop\\Bundle...', Array, Array) #3 E:\_My_File_____\_work\MyCode\myCode\phpworkspace\symfony-workshop\vendor\doctrine\orm\lib\Doct in E:\_My_File_____\_work\MyCode \myCode\phpworkspace\symfony-workshop\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php on line 837
为什么会出现这个错误呢
原因就是你本机器上的php版本与你的doctrine Bundle版本有些问题;
找到你报错的行数
ve ndor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php on line 833
那么如果你和我的代码一样是这段
public function newInstance() { if ($this->_prototype === null) { if (PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50513) { $this->_prototype = $this->reflClass->newInstanceWithoutConstructor(); } else { $this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name)); } } return clone $this->_prototype; }
那么直接替换:
public function newInstance() { // echo PHP_VERSION_ID; die(); // Uncomment this, in case you don't know your PHP_VERSION_ID if ($this->_prototype === null) { if (PHP_VERSION_ID === 50429 || PHP_VERSION_ID === 50609||PHP_VERSION_ID === 50629||PHP_VERSION_ID === 50513 || PHP_VERSION_ID === 50603 || PHP_VERSION_ID === 70009) { // This is the tricky line $this->_prototype = $this->reflClass->newInstanceWithoutConstructor(); } else { $this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name)); } } return clone $this->_prototype; }
其中PHP_VERSION_ID === 50429就是php版本号;
50429就是5.4.29,我的事5.6.29那么就是50629
如果有兴趣一起讨论php_Symfony的话还可以加群一起学习:
QQ群:182983780
参考以下是博客问题解决
http://stackoverflow.com/questions/24031048/fos-userbundle-unable-to-login
http://stackoverflow.com/questions/24596813/symfony2-contexterrorexception-on-production-server-erroneous-data-format-for
https://github.com/symfony/symfony/issues/11056