Symfony 2 - FOSUserBundle - 在User类的构造函数中创建并保留另一个实体

时间:2014-05-17 19:38:25

标签: php symfony constructor doctrine-orm fosuserbundle

我正在创建一个用户可以创建相册的网站 我想为每个用户创建一个默认相册。

我想创建一个Album实体并将其保存在User类的构造函数中。

有可能吗? 我只知道实体管理器无法从实体访问...这就是为什么它对我来说是个问题。

1 个答案:

答案 0 :(得分:2)

即使技术上可行,我强烈建议你不要这样做。

要回答你的问题,可以这样做:

class User extends FOSUser
{
    /**
     * @ORM\OneToMany(targetEntity="Album", cascade={"persist"})
     */
    private $albums;

    public function __construct()
    {
        $this->albums = new ArrayCollection();
        $this->addAlbum(new Album());
    }

    public function addAlbum(Album $album)
    {
        $this->albums[] = $album;
    }

    public function getAlbums()
    {
        return $this->albums:
    }
}

每当您创建新用户并保存时,使用此设置,将与其一起创建相关相册。我必须重复,尽管可能,但不要这样做

好的解决方案

很少有策略可用于实现您的目标。

FOSUserBundle master

如果你没有使用1.3.x版本的FOSUserBundle而是master,你可以看到RegistrationController触发了一些事件。您感兴趣的是FOSUserEvents::REGISTRATION_INITIALIZE。你应create an event listener并在听众中为用户添加专辑。

FOSUserBundle 1.3.x

如果您使用旧版本之一,这些活动很遗憾不会存在,您可以采取两种方式。

  1. Extend FOSUserBundle UserManager and override createUser method。您可以在那里添加您的相册添加逻辑。我更喜欢这种方法。
  2. 覆盖FOSUserBundle RegistrationController :: registerAction。它有时是可行的选择,但在你的情况下我认为选项1更好。