Symfony3 FOSUserBundle填充表

约翰

我通过遵循此Symfony文档来搞砸Symfony3 FOSUserBundle

我设法成功安装了它,并按照文档中的显示进行了设置。通过数据库检查,FSOUserBundle为我创建了此表:

    +-----------------------+--------------+------+-----+---------+----------------+
    | Field                 | Type         | Null | Key | Default | Extra          |
    +-----------------------+--------------+------+-----+---------+----------------+
    | id                    | int(11)      | NO   | PRI | NULL    | auto_increment |
    | username              | varchar(255) | NO   |     | NULL    |                |
    | username_canonical    | varchar(255) | NO   | UNI | NULL    |                |
    | email                 | varchar(255) | NO   |     | NULL    |                |
    | email_canonical       | varchar(255) | NO   | UNI | NULL    |                |
    | enabled               | tinyint(1)   | NO   |     | NULL    |                |
    | salt                  | varchar(255) | NO   |     | NULL    |                |
    | password              | varchar(255) | NO   |     | NULL    |                |
    | last_login            | datetime     | YES  |     | NULL    |                |
    | locked                | tinyint(1)   | NO   |     | NULL    |                |
    | expired               | tinyint(1)   | NO   |     | NULL    |                |
    | expires_at            | datetime     | YES  |     | NULL    |                |
    | confirmation_token    | varchar(255) | YES  |     | NULL    |                |
    | password_requested_at | datetime     | YES  |     | NULL    |                |
    | roles                 | longtext     | NO   |     | NULL    |                |
    | credentials_expired   | tinyint(1)   | NO   |     | NULL    |                |
    | credentials_expire_at | datetime     | YES  |     | NULL    |                |
    +-----------------------+--------------+------+-----+---------+----------------+

了解这些字段来自我在User实体中扩展的BasuUser。

下一步,我正在使用夹具将数据加载到该表中,但我想知道的是,我是否需要设置该表中的每个字段,我默认情况下会看到它们为NULL,因此何时以及如何填充这些字段?

谢谢

丹尼尔

如果您从FOSUser看User类,您会发现有一些设置器和构造函数可以完成一些所需的工作。看一下User类的构造函数:

public function __construct()
{
    $this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
    $this->enabled = false;
    $this->locked = false;
    $this->expired = false;
    $this->roles = array();
    $this->credentialsExpired = false;
}

如果您用,填充用户名$user->setUsername('username'),则字段username_canonical也将被填充。email类似email_canonicalEnabled如果不需要通过电子邮件进行确认,则应将其设置为true。Salt由构造函数填充。接下来,设置plainPassword,然后password自动编码和填充。Last login可以是任何一个。用户登录时将自动对其进行管理。Expired仅与可用时间受限制的帐户相关联。Confirmation_token与帐户的电子邮件确认有关。Password_requested_at允许避免发送数百封密码重置的电子邮件。管理角色使用add而不是set因为它是数组而不是字段。不用担心roles数据库中的ROLE_USER,这是为了节省表格容量。credentials_expired默认为false,但是您可以在此列中找到创造性的应用程序。

最后看看我创建用户超级管理员和10个用户的装置代码。

<?php
namespace Application\Sonata\UserBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\FixtureInterface;
use AppBundle\Entity\User;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LoadUserData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
    /**
     * @var ContainerInterface
     */
    private $container;

    /**
     * {@inheritDoc}
     */
    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    /**
     * {@inheritDoc}
     */
    public function load(ObjectManager $manager)
    {
        /** @var $manager \FOS\UserBundle\Doctrine\UserManager */
        $manager = $this->container->get('fos_user.user_manager');
        /** @var $user User */
        $user = $manager->createUser();
        $user->setUsername('admin');
        $user->setEmail('[email protected]');
        $user->setRoles(array('ROLE_SUPER_ADMIN'));
        $user->setEnabled(true);
        $user->setPlainPassword('admin_pass');
        $manager->updateUser($user);
        unset($user);

        $faker = \Faker\Factory::create();
        for ($i = 0; $i < 10; $i++)
        {
            /** @var $user User */
            $user = $manager->createUser();
            $user->setUsername($faker->userName);
            $user->setEmail($faker->safeEmail);
            $user->setRoles(array('ROLE_USER'));
            $user->setEnabled(true);
            $user->setPlainPassword('pass');
            $manager->updateUser($user);
            $this->addReference('user.demo_'.$i, $user);
        }
    }

    /**
     * @return integer
     */
    function getOrder()
    {
        return 10;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章