2012-08-26 1 views
1

테스트 목적으로 사용자를 만들려면 data fixture을 사용하고 싶습니다.데이터 픽스처 (또는 다른 곳)에서 DIC를 얻는 방법은 무엇입니까?

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

그리고 그것을 위해 내가 용기가 필요합니다

문제는 내가 FOS '사용자 관리자를 필요로합니다. 그럼 어떻게해야합니까? 컨트롤러 내부에있을 때와 달리, 나는 할 수 없다. $this->get('fos_user.user_manager').

+3

[documentation] (http://symfony.com/doc/master/bundles/DoctrineFixturesBundle/index.html#using-the-container-in-the-futuretures)까지 읽지 않았습니다. –

+0

@ m2mdas 당신이 내게있어, 덕분에 – ChocoDeveloper

답변

3

가장 쉬운 solution은 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('[email protected]'); 

     $user->setPlainPassword('mypass'); 
     $user->addRole('ROLE_USER'); 
     $user->setEnabled(true); 
     $userManager->updateUser($user); 
    } 
} 

, 당신은 코드의 몇 가지 여분의 줄을 소요 ContainerAwareInterface를 구현해야합니다.

+0

제발, 대답뿐만 아니라 문서에 대한 링크를 추가하십시오 –

+0

@ thecatontheflat 물론 =) – ChocoDeveloper

0

안타깝게도이 기능은 콘솔에서만 작동합니다. API를 통해 설비물을 로딩하는 것은 컨테이너 인식과 잘 작동하지 않으며 오류, 정지 및 기타 문제를 유발합니다.

+0

그게 무슨 소리 죠? 몇 가지 코드를 보여주십시오. 내가 아는 한 비품은 가짜 데이터를 만드는 것입니다. 기본 데이터는 초기 데이터입니다. 왜 API가 필요한가요? 그냥 명령을 실행하십시오. – ChocoDeveloper

+0

유닛 테스트에 포함 시키려면 setUp() 메소드에서 API를 통해 호출하려고합니다. 적어도 그것이 이론입니다. 나는 보여줄 수 있었지만 나는 완전히 뒤집었다. 당신이 나를 의심한다면, 비품과 용기 인식을 모두 사용하는 간단한 단위 테스트를 작성하십시오. 나는 반나절 동안 노력했고 20 가지 방법 중 하나도 온라인 작업 목록에 나열되지 않았고 phpunit이 고정되거나 무한 루프로 들어가는 결과를 가져 왔습니다. – Tom