UserBundleに関して別の問題が発生しました。Symfony2を使用してFOSバンドルをインストールおよび構成しているときにすべてが完璧になり、DBに適切に挿入された2人のユーザーを作成できました。
しかし、これらのアカウントのいずれかにログインしようとするたびに、次のエラーが発生します
Warning: Erroneous data format for unserializing 'VillaPrivee\UserBundle\Entity\User' in /Users/Vianney/Projets/VillaPrivee/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php line 869
これは、行869が参照するものです。
/**
* Creates a new instance of the mapped class, without invoking the constructor.
*
* @return object
*/
public function newInstance()
{
if ($this->_prototype === null) {
$this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
}
return clone $this->_prototype;
}
そして、これは私のユーザーエンティティです:
namespace VillaPrivee\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
ステップバイステップのドキュメントに従って全体をインストールしただけなので、何が間違っていたのかわかりません...ご協力ありがとうございます
PHPバージョン5.4.29または5.5.13を使用している場合
In: "/ vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php" find function "newInstance"(827行目あたり)そして、修正がDoctrineによってマージされるまで、以下のように編集します。
public function newInstance()
{
if ($this->_prototype === null) {
// $this->_prototype = unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
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;
}
@ベンジ:ヒントのthx: https://github.com/symfony/symfony/issues/11056
私自身の質問に答えて、私はこの男のおかげで回避策を見つけました:
http://www.doctrine-project.org/jira/browse/DDC-312
説明に関しては彼は私よりはるかに優れていますが、これは私が今持っているものであり、魅力のように機能します! :)
{
if ($this->_prototype === null) {
$this->_prototype = @unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
if ($this->_prototype === false) {
$this->_prototype = @unserialize(sprintf('C:%d:"%s":0:{}', strlen($this->name), $this->name));
}
}
return clone $this->_prototype;
}
コマンドラインでPHP version by "php -v"で確認してください。例PHP 5.6.10
/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php::newInstance()ファイルを編集します
ここにPHP_VERSION_IDを追加
if (PHP_VERSION_ID === 50610 ) {
.
}
vendor
ディレクトリを編集しないため、これは一時的な解決策です。
私はphp 5.6.6(ローカルでmampを使用)で同じ問題を経験しましたが、私の回避策は5.4に戻ることでした。それはとにかくサーバーで実行していたバージョンだからです...しかし、間違いなく覚えておくべきことは...
このコードは私のために機能します、YourApplicationName\vendor\doctrine\lib\Doctrine\ORM\Mapping\ClassMetadataInfo.php
既存のコードを以下のコードに置き換えます
If ($this->_prototype === null) {
$this->_prototype = @unserialize(sprintf('O:%d:"%s":0:{}', strlen($this->name), $this->name));
if ($this->_prototype === false) {
$this->_prototype = unserialize(sprintf('C:%d:"%s":0:{}', strlen($this->name), $this->name));
}
}