簡體   English   中英

Symfony3 FOSUserBundle填充表

[英]Symfony3 FOSUserBundle populate table

我通過遵循此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    |                |
    +-----------------------+--------------+------+-----+---------+----------------+

了解這些字段來自我在用戶實體中擴展的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則也會填充字段username_canonical emailemail_canonical 如果不需要通過電子郵件進行確認,則應將“ Enabled設置為true。 Salt由構造函數填充。 接下來,您設置plainPassword然后password將自動編碼和填充。 Last login可以是任何一個。 用戶登錄時將自動對其進行管理。 Expired僅與具有有限可用時間的帳戶關聯。 Confirmation_token與帳戶的電子郵件確認有關。 Password_requested_at可以避免發送數百封密碼重置的電子郵件。 管理角色使用add而不是set因為它是數組而不是字段。 不用擔心ROLE_USER數據庫中的空roles ,這是為了節省表容量。 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('admin@example.com');
        $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;
    }
}

只要您在“ app / config / security.yml”文件中設置了此設置:

- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }

然后,您應該能夠轉到URL /register ,然后提示您進行注冊,然后您可以查詢fos_user表,然后將看到它被填充。

如果您需要使用AD身份驗證,可以在上瀏覽我的博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM