1

FOSUserBundle を使用しています。

これはUserエンティティです:

namespace Shop\UserBundle\Entity;

use FOS\UserBundle\Entity\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;

    protected $shop;

    public function __construct()
    {
        $this->shop = 'shop';
        parent::__construct();
    }

    public function getShop()
    {
        return $this->shop;
    }
}

コントローラーを呼び出すとgetShop:

$user = $this->getUser()->getShop()

結果が nullクラスで機能
しないのはなぜですか? デフォルトとして「ショップ」文字列があると思っていました__constructUser

4

2 に答える 2

3

ユーザーを初期化するためにコールバックを置くことができます。エンティティの@ORM\HasLifecycleCallbacksとメソッドの@ORM\PostLoadの2 つの注釈だけです。例えば:

namespace Shop\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 * @ORM\HasLifecycleCallbacks
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    protected $shop;

    /**
     * @ORM\PostLoad
     */
    public function init()
    {
        $this->shop = 'shop';
        parent::init();
    }

    public function getShop()
    {
        return $this->shop;
    }
}
于 2014-01-14T20:31:22.823 に答える
1

基本的に、ドクトリン エンティティの __construct はエンド ユーザー コードで直接呼び出されます。Doctrine は、データベースからエンティティを取得するときに構造を使用しません。詳細については、その質問を確認してください。必要に応じてマッピングを追加することで、これをデータベースに永続化できます。

于 2013-04-10T19:12:32.460 に答える