编辑默认的 SonataUserBundle 用户实体

Editing default SonataUserBundle user entity

我使用的是 SonataUserBundle 而没有扩展 FOSUserBundle。我想更改默认的 SonataUser 实体,并添加或删除一些字段。

这是使用 SonataEasyExtendsBundle 创建的默认用户实体

<?php

/**
 * This file is part of the <name> project.
 *
 * (c) <yourname> <youremail>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Application\Sonata\UserBundle\Entity;

use Sonata\UserBundle\Entity\BaseUser as BaseUser;

/**
 * This file has been generated by the Sonata EasyExtends bundle.
 *
 * @link https://sonata-project.org/bundles/easy-extends
 *
 * References :
 *   working with object : http://www.doctrine-project.org/projects/orm/2.0/docs/reference/working-with-objects/en
 *
 * @author <yourname> <youremail>
 */
class User extends BaseUser
{
    /**
     * @var int $id
     */
    protected $id;

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

    public function __toString()
    {
        if (parent::getFirstname() != null){
            return parent::getFullname();
        } else {
            return parent::getUsername();
        }
    }
}

我认为您可以像添加任何其他实体一样添加字段、方法和映射,但恐怕您无法删除字段(但您可以将它们隐藏在自定义管理中)。映射文件在您的 Application 目录中。

好的,找到解决方案了,如果有人遇到这个问题,这可以解决它

这些是程序:

  1. 通过 SonataEasyExtends 扩展 User 实体后,删除学说目录默认情况下,您可以在 Application/Sonata/UserBundle/Resources/config/doctrine
  2. 中找到它
  3. 配置 User 实体以满足您的需求,这也在您的 Application 文件夹中。在添加或删除任何内容之前,您的 User 实体必须是这样的:

namespace Application\Sonata\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;

/**
 * User
 *
 * @ORM\Table(name="fos_user_user")
 * @ORM\Entity
 */
class User extends BaseUser
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

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

    public function __toString()
    {
        if (parent::getFirstname() != null){
            return parent::getFullname();
        } else {
            return parent::getUsername();
        }
    }
}
  1. 生成管理员 Class,只需使用 app/console sonata:admin:generate Application/Sonata/UserBundle/Entity/User

  2. 覆盖管理员 Class,轻松将 UserAdmin.phpSonata\UserBundle\Admin\Model 复制并粘贴到您新创建的 管理员Class

可选

  1. 有一个 issue #418 可以通过将 UserAdmin:182if ($this->getSubject() && !$this->getSubject()->hasRole('ROLE_SUPER_ADMIN')) 更改为 if ($this->getSubject() && $this->getSubject()->hasRole('ROLE_SUPER_ADMIN'))
  2. 来解决