我想使用数据固定装置来创建用于测试目的的用户。
问题是我需要FOS的用户经理:
$userManager = $container->get('fos_user.user_manager');
为此,我需要这个容器。那么我该怎么得到它呢?这不像在控制器中,我不能执行$this->get('fos_user.user_manager')
。
最简单的解决方案是扩展Symfony''Component''DependencyInjection''Containerware。
<?php
namespace SomeCompany'SomeBundle'DataFixtures'MongoDB;
use Doctrine'Common'DataFixtures'FixtureInterface;
use Doctrine'Common'Persistence'ObjectManager;
use Symfony'Component'DependencyInjection'ContainerAware;
use Symfony'Component'DependencyInjection'ContainerInterface;
use SomeCompany'SomeBundle'Document'User;
class LoadUsers extends ContainerAware implements FixtureInterface
{
/**
* {@inheritDoc}
*/
public function load(ObjectManager $manager)
{
$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->createUser();
$user->setUsername('myuser');
$user->setEmail('a@a.com');
$user->setPlainPassword('mypass');
$user->addRole('ROLE_USER');
$user->setEnabled(true);
$userManager->updateUser($user);
}
}
如果您已经在扩展另一个类,那么您必须实现ContainerwareInterface,它只需要额外的几行代码。
不幸的是,这只适用于使用控制台的情况。通过API加载固定装置不能很好地实现容器感知,并导致错误、冻结和其他问题。