我通过遵循此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_canonical
。Enabled
如果不需要通过电子邮件进行确认,则应将其设置为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] 删除。
我来说两句