2013-03-24 62 views
1

我想创建SOM装置到我的项目进行测试。我现在在一个命令行脚本中执行此操作,但是我从Doctrine中发现了DataFixtures捆绑包,并且想要对其进行测试。 我有以下代码:Symfony2与FOSUserBundle的数据夹具

<?php 
// src/Pan100/MoodLogBundle/DataFixtures/ORM/LoadUserData.php 

namespace Acme\HelloBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\FixtureInterface; 
use Doctrine\Common\Persistence\ObjectManager; 
use Symfony\Component\DependencyInjection\ContainerAware; 

use Pan100\MoodLogBundle\Entity\Day; 
use Pan100\MoodLogBundle\Entity\Medication; 
use Pan100\MoodLogBundle\Entity\Trigger; 

use FOS\UserBundle\Doctrine\UserManager; 

class MockDataMaker extends ContainerAware 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function load(ObjectManager $manager) 
    { 
     $userManager = $container->get('fos_user.user_manager'); 
     //make some users 
     $user = $userManager->createUser(); 
     $user->setUsername('John'); 
     $user->setEmail('[email protected]'); 
     $user->setPlainPassword('passord'); 
     $userManager->updateUser($user); 
    } 

} 

而且我得到这个:

[InvalidArgumentException]             
    Could not find any fixtures to load in:          

    - /var/www/path/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/D 
    ataFixtures/ORM                
    - /var/www/path/vendor/symfony/symfony/src/Symfony/Bundle/SecurityBundle/Da 
    taFixtures/ORM                
    - /var/www/path/vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle/DataFi 
    xtures/ORM                 
    - /var/www/path/vendor/symfony/monolog-bundle/Symfony/Bundle/MonologBundle/ 
    DataFixtures/ORM                
    - /var/www/path/vendor/symfony/swiftmailer-bundle/Symfony/Bundle/Swiftmaile 
    rBundle/DataFixtures/ORM              
    - /var/www/path/vendor/symfony/assetic-bundle/Symfony/Bundle/AsseticBundle/ 
    DataFixtures/ORM                
    - /var/www/path/vendor/doctrine/doctrine-bundle/Doctrine/Bundle/DoctrineBun 
    dle/DataFixtures/ORM               
    - /var/www/path/vendor/sensio/framework-extra-bundle/Sensio/Bundle/Framewor 
    kExtraBundle/DataFixtures/ORM             
    - /var/www/path/vendor/jms/aop-bundle/JMS/AopBundle/DataFixtures/ORM   
    - /var/www/path/vendor/jms/di-extra-bundle/JMS/DiExtraBundle/DataFixtures/O 
    RM                   
    - /var/www/path/vendor/jms/security-extra-bundle/JMS/SecurityExtraBundle/Da 
    taFixtures/ORM                
    - /var/www/path/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/DataFixt 
    ures/ORM                  
    - /var/www/path/src/Pan100/MoodLogBundle/DataFixtures/ORM      
    - /var/www/path/vendor/sonata-project/intl-bundle/Sonata/IntlBundle/DataFix 
    tures/ORM                  
    - /var/www/path/vendor/ob/highcharts-bundle/Ob/HighchartsBundle/DataFixture 
    s/ORM                   
    - /var/www/path/vendor/doctrine/doctrine-fixtures-bundle/Doctrine/Bundle/Fi 
    xturesBundle/DataFixtures/ORM             
    - /var/www/path/src/Acme/DemoBundle/DataFixtures/ORM       
    - /var/www/path/vendor/symfony/symfony/src/Symfony/Bundle/WebProfilerBundle 
    /DataFixtures/ORM                
    - /var/www/path/vendor/sensio/distribution-bundle/Sensio/Bundle/Distributio 
    nBundle/DataFixtures/ORM              
    - /var/www/path/vendor/sensio/generator-bundle/Sensio/Bundle/GeneratorBundl 
    e/DataFixtures/ORM 

我的问题是:如何在使用FOSUserBundle灯具用户?

+3

你的灯具类不能实现'FixtureInterface'或者说是复制粘贴错字? – 2013-03-24 18:25:46

回答

1

源文件的位置不符合您的命名空间:

src/Pan100/MoodLogBundle/DataFixtures/ORM/LoadUserData.php VS namespace Acme\HelloBundle\DataFixtures\ORM;

试试你的命名空间设置为Pan100\MoodLogBundle\DataFixtures\ORM

由于MolecularMan指出,你也应该实施FixtureInterface

6

你的类必须伸出“AbstractFixture”并实现“ContainerAwareInterface”访问的UserManager的服务! 如果你的类不扩展“AbstractFixture”,不是夹具;-) 寻找不同的fixture接口和différentcontaineraware接口在fosub和symfony中有更多的方法。 验证命名空间,如果它是一个副本并粘贴 Sadden为我真正不可怕的英语! 例如:有序灯具

use Doctrine\Common\DataFixtures\AbstractFixture; 
use Doctrine\Common\DataFixtures\OrderedFixtureInterface; 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Doctrine\Common\Persistence\ObjectManager; 
class LoadArticleFixture extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface 
{ 
/** 
* @var ContainerInterface 
*/ 
private $container; 

/** 
* {@inheritDoc} 
*/ 
public function setContainer(ContainerInterface $container = null) 
{ 
    $this->container = $container; 
} 
public function load(ObjectManager $manager) 
{ 
    $auteurs = $this->container->get('fos_user.user_manager')->findUsers(); 
    etc... 
} 
相关问题