Расширение сущности SonataUserBundle

Я хочу расширить атрибуты сущности пользователя по умолчанию. В базе данных после расширения FOSUserBundle с помощью SonataUserBunle осталось 2 таблицы для хранения пользователей: fos_user и fos_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, я расширил UserAdmin, создав еще один класс UserAdmin в src/Acme/DemoBundle/Admin/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;
    }
}


Что мне сделать, чтобы расширить таблицу fos_user по умолчанию с помощью php app/console doctrine:generate:entities Acme/DemoBundle

Я прочитал много сообщений об этой проблеме, но ни одно из решений не помогло мне. Я попытался расширить класс Model вместо класса Entity, но также ничего не изменилось.


person 123dcck    schedule 26.05.2013    source источник


Ответы (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 и также добавит ваши настраиваемые поля из вашего пользовательского объекта.

person Baba Yaga    schedule 04.06.2013
comment
спасибо, но я уже решил это, я выполнил шаги, описанные в этом ответе: stackoverflow.com/a/15625000/1370752 - person 123dcck; 17.06.2013