通过遵循此Symfony docs
,我正在搞乱Symfony3 FOSUserBundle我成功安装了它并将其设置为docs中的show。经过数据库检查,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,我在用户实体中扩展。
下一步我使用Fixtures将数据加载到此表中,但我想知道的是,我需要设置此表中的每个字段,我默认情况下看到的是NULL,那么何时以及如何填充这些字段?
THX
答案 0 :(得分:1)
如果从FOSUser查看User类,您会看到有一些setter和构造函数可以完成一些必要的工作。查看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('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;
}
}
答案 1 :(得分:0)
只要您在&#34; app / config / security.yml&#34;文件:
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
然后你应该能够转到URL /register
,然后提示你注册,然后你可以查询fos_user
表,你会看到它被填充。
如果您需要使用AD身份验证,则可以浏览my blog on that。