个性化阅读
专注于IT技术分析

如何在Symfony中使用FOSUserBundle手动将自定义字段添加到用户表

本文概述

如我们之前的文章”如何在Symfony中使用FOSUserBundle实现用户系统”中所示, 此捆绑包使你可以轻松拥有超级用户系统。

但是, 你可能需要向用户表中添加更多字段, 因为普通结构仅具有基本字段来向用户授予访问权限。

实现

要手动添加新字段, 只需添加一个名称, 属性, getter和setter的变量, 更新数据库的架构(或使用数据库管理器手动添加字段)就可以了。

FosUserBundle需要一个处理用户系统的User.php类, 该类先前是在实现FOSUserBundle的过程中创建的, 它应类似于:

注意:请记住, 如果你已经实现了用户捆绑包, 则该类是在项目中的某个位置创建的。

<?php
namespace mynamespace;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;
    
    // Change the targetEntity path if you want to create the group
    
    /**
     * @ORM\ManyToMany(targetEntity="userBundle\Entity\Group")
     * @ORM\JoinTable(name="fos_user_user_group", *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
     * )
     */
    protected $groups;

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

现在, 要添加一个简单字段(即” about”), 先前的类现在将包含以下方法和变量:

<?php
/**
 * @var string
 *
 * @ORM\Column(name="about", type="string", length=255, nullable=true)
 */
private $about;

/**
 * Get about
 *
 * @return String
 */
public function getAbout()
{
    return $this->about;
}

/**
 * Set about
 *
 * @param String $about
 * @return User
 */
public function setAbout($about)
{
    $this->about = $about;

    return $this;
}

最后, 该类应如下所示:

<?php
namespace mynamespace;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

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

    /**
     * @var string
     *
     * @ORM\Column(name="about", type="string", length=255, nullable=true)
     */
    private $about;
    
    // Change the targetEntity path if you want to create the group
    
    /**
     * @ORM\ManyToMany(targetEntity="userBundle\Entity\Group")
     * @ORM\JoinTable(name="fos_user_user_group", *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, *      inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
     * )
     */
    protected $groups;

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

    /**
     * Get about
     *
     * @return String
     */
    public function getAbout()
    {
        return $this->about;
    }
    
    /**
     * Set about
     *
     * @param String $about
     * @return User
     */
    public function setAbout($about)
    {
        $this->about = $about;
    
        return $this;
    }
}

现在, 只需使用以下命令更新数据库的架构(或手动在数据库中添加字段):

php bin/console doctrine:schema:update --force

现在, 如果你打开数据库, 你将看到新的”关于”字段。在此处阅读该学说的官方文档中有关@ORM \ Column的更多信息。

现场例子

以下代码段显示了不同类型的常用字段:

<?php

///// AutoIncrementable integer field
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $myfieldname;

///// Limit string with nullable type
/**
 * @var string
 *
 * @ORM\Column(name="myfieldname", type="string", length=255, nullable=true)
 */
private $myfieldname;

///// Long text field
/**
 * @var string
 *
 * @ORM\Column(name="myfieldname", type="text")
 */
private $myfieldname;

///// Boolean field
/**
 * @var string
 *
 * @ORM\Column(name="myfieldname", type="boolean")
 */
private $myfieldname;

玩得开心

赞(0)
未经允许不得转载:srcmini » 如何在Symfony中使用FOSUserBundle手动将自定义字段添加到用户表

评论 抢沙发

评论前必须登录!