[英]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
。 與email
和email_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.