【问题标题】:Extend SonataUserBundle Entity扩展 SonataUserBundle 实体
【发布时间】:2013-05-26 22:01:40
【问题描述】:

我想扩展默认用户实体属性。在使用 SonataUserBunle 扩展 FOSUserBundle 后的数据库中,有 2 个用于存储用户的表:fos_userfos_user_user。我想扩展fos_user

这里是 app/AppKernel.php:

new Sonata\UserBundle\SonataUserBundle('FOSUserBundle'),
new Application\Sonata\UserBundle\ApplicationSonataUserBundle(),

在我设置的 app/config.yml 文件中:

fos_user:
    db_driver:       orm<br>
    firewall_name:   main<br>
    user_class:      Acme\DemoBundle\Entity\User<br> 
    group:<br>
        group_class: Application\Sonata\UserBundle\Entity\Group<br>

sonata_user:
    security_acl:    true

    class:
        user:        Acme\DemoBundle\Entity\User
    admin:
        user:
            class:   Acme\DemoBundle\Admin\UserAdmin
parameters:
    sonata.user.admin.user.class: Blogger\BlogBundle\Admin\UserAdmin
    sonata.user.admin.user.entity: Blogger\BlogBundle\Entity\User

doctrine:
    orm:
        auto_mapping: auto

SonataUserBundle 在src/Application/Sonata/UserBundle创建
为了覆盖 SonataUserBundle,我通过在 src/Acme/DemoBundle/Admin/UserAdmin 中创建另一个 UserAdmin 类来扩展 UserAdmin,并且一切正常
现在我想扩展用户实体(fos_user 表)以添加新属性。
这是我想要扩展默认用户实体的 Acme/Demo/Entity/User.php

namespace Acme\DemoBundle\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;

    /*
     * @ORM\Column(type="string", name="newAttribute")
     */
    protected $newAttribute;


    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}


我应该怎么做才能用php app/console doctrine:generate:entities Acme/DemoBundle扩展默认fos_user

我已经阅读了很多关于这个问题的帖子,但没有一个解决方案对我有帮助。我尝试扩展 Model 类而不是 Entity 类,但也没有任何改变

【问题讨论】:

    标签: symfony symfony-sonata sonata-user-bundle


    【解决方案1】:

    你不必这样做。

    new Sonata\UserBundle\SonataUserBundle('FOSUserBundle')
    

    这里你告诉 SonataUserBundle 也使用 FOSUserBundle。

    然后在您设置的用户实体中:

    use Sonata\UserBundle\Entity\BaseUser as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="User")
    */
    class User extends BaseUser
    

    因为您已经对 SonataUserBundle 说“使用 fosuserbundle”,并且您从奏鸣曲用户捆绑用户实体扩展,他会将这 2 个模型“合并”为 1,并从您的用户实体中添加您的自定义字段。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 2014-05-11
    • 2021-03-22
    • 2016-06-18
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多