sonata用户捆绑包,重写


sonata user bundle, override

我正在尝试使用sonata用户捆绑包。我必须添加一些字段。

我看到了一个文件夹Application''Sonata''UserBundle,它是用Sonata用户捆绑包安装创建的。

然后我尝试修改Entity''User.php文件:

<?php
namespace Application'Sonata'UserBundle'Entity;
use Sonata'UserBundle'Entity'BaseUser as BaseUser;
class User extends BaseUser
{
    /**
     * @var integer $id
     */
    protected $id;
    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId()
    {
        return $this->id;
    }

例如添加:

<?php
namespace Application'Sonata'UserBundle'Entity;
use Sonata'UserBundle'Entity'BaseUser as BaseUser;
class User extends BaseUser
{
    /**
     * @var integer $id
     */
    protected $id;
    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * @var String $nom
     */
    protected $nom;
/**
 * Get nom
 *
 * @return string 
 */
public function getNom() {
    return $this->nom;
}

但我的数据库没有更新,什么都不起作用。你知道怎么做吗?

或者,我也尝试在UserAdmin.php文件中写入:

 $formMapper
            ->with('General')
                ->add('username')
                ->add('email')
                ->add('plainPassword', 'text', array(
                    'required' => (!$this->getSubject() || is_null($this->getSubject()->getId()))
                ))
                ->add('nom')
            ->end()
            ->with('Groups')
                ->add('groups', 'sonata_type_model', array(
                    'required' => false,
                    'expanded' => true,
                    'multiple' => true
                ))
            ->end()

但我有以下错误:

Please define a type for field `Prenom` in `Sonata'UserBundle'Admin'Entity'UserAdmin`

谢谢向致以最良好的问候

一旦您生成了sonata用户捆绑包的简单扩展,sonata就会为实体创建orm文件。例如,如果您的扩展捆绑包是在src/Application中生成的,那么您的orm映射文件将在src/Application/Sonata/UserBundle/Resources/config/doctrine中生成为User.orm.xmlUser.mongodb.xml,具体取决于您的数据库类型。在原则映射文件中添加字段定义

<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                  http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Application'Sonata'UserBundle'Entity'User" table="fos user table name">
        <id name="id" column="id" type="integer">
            <generator strategy="AUTO" />
        </id>
        <field name="nom" type="string" column="title" length="255" nullable="false"/>
    </entity>
</doctrine-mapping>

如果您不需要xml映射,并且希望使用注释,那么将条令文件夹重命名为User实体中的其他类似src/Application/Sonata/UserBundle/Resources/config/doctrine-backup的文件夹,以注释的形式添加字段映射

namespace Application'Sonata'UserBundle'Entity;
use Sonata'UserBundle'Entity'BaseUser as BaseUser;
use Doctrine'ORM'Mapping as ORM;
/**
 * @ORM'Table(name="fos user table name")
 * @ORM'Entity
 */
class User extends BaseUser {
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string
     *
     * @ORM'Column(name="nom", type="string", length=255, nullable=true)
     */
    protected $nom;
    /**
     * Set nom
     *
     * @param string $nom
     *
     * @return User
     */
    public function setNom( $nom) {
        $this->nom= $nom;
        return $this;
    }
    /**
     * Get nom
     *
     * @return string
     */
    public function getNom() {
        return $this->nom;
    }
}

还有一点需要注意,不要像您的错误那样修改捆绑包的核心文件,即Sonata'UserBundle'Admin'Entity'UserAdmin尝试覆盖主用户管理类sonata提供了一种通过用户捆绑包配置来定义管理类的方法

sonata_user:
    class:                  # Entity Classes
        user:               Application'Sonata'UserBundle'Entity'User
        group:              Application'Sonata'UserBundle'Entity'Group
    admin:                  # Admin Classes
        user:
            class:          Application'Sonata'UserBundle'Admin'UserAdmin # there define your extended admin class
            controller:     SonataUserBundle:UserCURD
            translation:    SonataUserBundle
        group:
            class:          Sonata'UserBundle'Admin'Entity'GroupAdmin
            controller:     SonataAdminBundle:CRUD
            translation:    SonataUserBundle