1

データ フィクスチャを使用して、テスト目的でユーザーを作成したいと考えています。

問題は、FOS のユーザー マネージャーが必要なことです。

$userManager = $container->get('fos_user.user_manager');

そのためにはコンテナが必要です。では、どうすれば入手できますか?コントローラーの中にいるときとは違い、できません$this->get('fos_user.user_manager')

4

2 に答える 2

3

最も簡単な解決策は、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 を実装する必要があります。これには数行のコードを追加するだけです。

于 2012-08-26T17:21:04.270 に答える
0

残念ながら、これはコンソールを使用する場合にのみ機能します。API を介したフィクスチャのロードは、コンテナ認識ではうまく機能せず、エラー、フリーズ、およびその他の問題につながります。

于 2013-02-22T14:24:26.063 に答える