$ php app/console fos:user:promote


$ 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

 

posted @ 2017-04-27 15:22  ldp.im  阅读(465)  评论(0编辑  收藏  举报