2013-03-24 3 views
1

Я хочу создать som fixtures для моего проекта для тестирования. Я делаю это в скрипте командной строки, но я обнаружил пакет DataFixtures из Doctrine и хотел его проверить. У меня есть следующий код:Symfony2 Data Fixtures с 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' или, что копировать-вставить опечатку? –

ответ

1

Ваше местоположение исходного файла не совпадает с пространством имен:

src/Pan100/MoodLogBundle/DataFixtures/ORM/LoadUserData.php против namespace Acme\HelloBundle\DataFixtures\ORM;

Попробуйте настроить пространство имен Pan100\MoodLogBundle\DataFixtures\ORM.

Как MolecularMan указывает вы должны также реализации FixtureInterface

6

ваш класс должен распространяется «AbstractFixture» и реализует «ContainerAwareInterface» для usermanager доступа к услуге! , если ваш класс не расширяет «AbstractFixture», не является прибором ;-) искать различные интерфейсы приборов и différent containeraware Интерфейсы в 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... 
} 
Смежные вопросы