データ フィクスチャを使用して、テスト目的でユーザーを作成したいと考えています。
問題は、FOS のユーザー マネージャーが必要なことです。
$userManager = $container->get('fos_user.user_manager');
そのためにはコンテナが必要です。では、どうすれば入手できますか?コントローラーの中にいるときとは違い、できません$this->get('fos_user.user_manager')
。
データ フィクスチャを使用して、テスト目的でユーザーを作成したいと考えています。
問題は、FOS のユーザー マネージャーが必要なことです。
$userManager = $container->get('fos_user.user_manager');
そのためにはコンテナが必要です。では、どうすれば入手できますか?コントローラーの中にいるときとは違い、できません$this->get('fos_user.user_manager')
。
最も簡単な解決策は、Symfony\Component\DependencyInjection\ContainerAware を拡張することです。
<?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);
}
}
すでに別のクラスを拡張している場合は、ContainerAwareInterface を実装する必要があります。これには数行のコードを追加するだけです。
残念ながら、これはコンソールを使用する場合にのみ機能します。API を介したフィクスチャのロードは、コンテナ認識ではうまく機能せず、エラー、フリーズ、およびその他の問題につながります。