Error en Datafixture

22 views
Skip to first unread message

Ludwring Liccien

unread,
Jun 8, 2015, 8:12:14 PM6/8/15
to symfo...@googlegroups.com
Saludos

Gracias de antemano por la ayuda

Estoy tratando de crear el Datafixture de mi entidad Usuario pero me da este error:



C:\wamp\www\seda>php app/console doctrine:fixtures:load --append
<? php

namespace cufm\SedaBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use cufm\SedaBundle\Entity\Usuario;
use cufm\SedaBundle\Entity\Cargo;
use cufm\SedaBundle\Entity\Dependencia;

class Usuarios implements FixtureInterface
{
        public function load(ObjectManager $manager)
        {
                $cargos = $manager->getRepository('SedaBundle:Cargo')->findAll();
                $dependencias = $manager->getRepository('SedaBundle:Dependencia')->findAll();



                $usuarios = array(
                        array('nombres' =>'Karelis', 'apellidos' =>'Torrealba', 'cedula' =>12345678, 'username' =>'cor...@correo.com', 'pa
ssword' =>123456, 'nivel' =>1, 'dependencia' =>18, 'cargo' =>10, 'supervisa' =>0, 'supervisada' =>NULL),


                );

        foreach ($usuarios as $usuario) {
                $entidad = new Usuario();
                $entidad->setNombres($usuario['nombres']);
                $entidad->setApellidos($usuario['apellidos']);
                $entidad->setCedula($usuario['cedula']);
                $entidad->setUsername($usuario['username']);
            $factory = $this->get('security.encoder_factory');
            $encoder = $factory->getEncoder($usuario['username']);
            $pass = $encoder->encodePassword($usuario['password'],$usuario->getSalt());
                $entidad->setPassword($pass);
                $entidad->setDependencia($dependencias[$usuario['dependencia']]);
                $entidad->setCargo($cargos[$usuario['cargo']]);
                $entidad->setNivel($usuario['nivel']);
                $entidad->setSupervisor($usuario['supervisa']);
                $entidad->setSupervisa($usuario['supervisada']);

                //$entidad->addRole($usuario['rol']);

                $manager->persist($entidad);
        }
                $manager->flush();
        }
}


  [InvalidArgumentException]
  Could not find any fixtures to load in:
  - C:\wamp\www\seda\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\symfony\src\Symfony\Bundle\SecurityBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\symfony\src\Symfony\Bundle\TwigBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\monolog-bundle\Symfony\Bundle\MonologBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\swiftmailer-bundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\assetic-bundle\Symfony\Bundle\AsseticBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\doctrine\doctrine-bundle\Doctrine\Bundle\DoctrineBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\sensio\framework-extra-bundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\doctrine\doctrine-fixtures-bundle\Doctrine\Bundle\FixturesBundle/DataFixtures/ORM
  - C:\wamp\www\seda\src\cufm\SedaBundle/DataFixtures/ORM
  - C:/wamp/www/seda/vendor/knplabs/knp-snappy-bundle/Knp/Bundle/SnappyBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\javiereguiluz\easyadmin-bundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\symfony\symfony\src\Symfony\Bundle\WebProfilerBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\sensio\distribution-bundle\Sensio\Bundle\DistributionBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\sensio\generator-bundle\Sensio\Bundle\GeneratorBundle/DataFixtures/ORM
  - C:\wamp\www\seda\vendor\raulfraile\ladybug-bundle\RaulFraile\Bundle\LadybugBundle/DataFixtures/ORM



doctrine:fixtures:load [--fixtures[="..."]] [--append] [--em="..."] [--purge-with-truncate]

Carlos A Salazar

unread,
Jun 9, 2015, 2:45:20 AM6/9/15
to symfo...@googlegroups.com
Pues la Cosa estan tambien en que estoy seguro que el findAll te retorna un Array pero de Objetos. por lo que no creo que puedas hacer
$dependencias[$usuario['dependencia']]  Igual con Cargos...

Necesitas hacer un proceso, para la entidad que te retorne un array y seguramente, te podria funcionar.. usando el getArrayResult()

algo como esto:
$query = $em->createQuery("SELECT dependencia FROM SedaBundle:Dependencia dependencia");
$depens = $query->getArrayResult();
Algo asi 
intentalo a ver.

--
Has recibido este mensaje porque estás suscrito al grupo "Symfony-Ven" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-ven...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a symfo...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/symfony-ven/b8d8657f-db3a-4f9a-b232-b1653bb1a961%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
<------------->
Ing Carlos A Salazar
Cambio y Fuera

Carlos A Salazar

unread,
Jun 9, 2015, 2:48:42 AM6/9/15
to symfo...@googlegroups.com

Ludwring Liccien

unread,
Jun 17, 2015, 11:03:24 AM6/17/15
to symfo...@googlegroups.com
Saludos

Gracias por sus respuestas

Carlos A Salazar Resolvi lo que me comentaste pero aun persiste el problema y no me muestra donde esta el error

Alguien sabe como detectar los errores en los DataFixture algo como el LadybugBundle 

Cambia el código al siguiente




<? php

namespace cufm\SedaBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use cufm\SedaBundle\Entity\Usuario;
use cufm\SedaBundle\Entity\Dependencia;
use cufm\SedaBundle\Entity\Cargo;
use cufm\SedaBundle\Entity\Role;

class Usuarios extends AbstractFixture implements OrderedFixtureInterface
{

    /**
    * {@inheritDoc}
    */      
public function load(ObjectManager $manager)
{
            $usuarios = array(
            array('nombres' =>'test', 'apellidos' =>'test', 'cedula' =>"12345679", 'username' =>'te...@cufm.tec.ve', 'password' =>'123456', 'dependencia' =>19, 'cargo' =>4, 'supervisa' =>0, 'supervisada' =>NULL, 'nivel' =>1, 'rol' =>array(1)),
                
            );
        
        $repodependencia = $this->getDoctrine()->getRepository('SedaBundle:Dependencia');
        $repocargo = $this->getDoctrine()->getRepository('SedaBundle:Cargo');
        $reporol = $this->getDoctrine()->getRepository('SedaBundle:Role');
        
                   
        foreach ($usuarios as $usuario) {
            $entidad = new Usuario();
            $entidad->setNombres($usuario['nombres']);
            $entidad->setApellidos($usuario['apellidos']);
            $entidad->setCedula($usuario['cedula']);
            $entidad->setUsername($usuario['username']);
            $entidad->setNivel($usuario['nivel']);
                $factory = $this->get('security.encoder_factory');
                $encoder = $factory->getEncoder($entidad);
                $pass = $encoder->encodePassword($usuario['password'],$entidad->getSalt());
            $entidad->setPassword($pass);
                $dependencia = $repodependencia->findById($usuario['dependencia']);
            $entidad->setDependencia($dependencia[0]);
                $cargo = $repocargo->findById($usuario['cargo']);
            $entidad->setCargo($cargo[0]);
            $entidad->setSupervisor($usuario['supervisa']);
            // Validacion de Dependencia que supervisa
            if (!is_null($usuario['supervisada'])) {
                $supervisada = $repodependencia->findById($usuario['supervisada']);
                $entidad->setSupervisa($supervisada[0]);
            }
            // Validacion de cantidad de roles
            $rol = $reporol->findById($usuario['rol']);
            if (count($usuario['rol']) == 1) {
                $entidad->addRole($rol[0]);        
            }elseif (count($usuario['rol']) == 2) {
                $entidad->addRole($rol[0]);
                $entidad->addRole($rol[1]);
            }else{
                $entidad->addRole($rol[0]);
                $entidad->addRole($rol[1]);
                $entidad->addRole($rol[2]);
            }
            $entidad->setIsActive(1);
$manager->persist($entidad);
  }
$manager->flush();
}

    /**
    * {@inheritDoc}
    */
    public function getOrder()
    {
        return 5; // the order in which fixtures will be loaded
    }       

}

oyepez003

unread,
Jun 17, 2015, 11:26:42 AM6/17/15
to symfo...@googlegroups.com
Te recomiendo el bundle AliceBundle para la carga de fixture, lo bueno de el es que puedes usar archivos yml, xml etc....

Si quieres un ejemplo puede guiarte por este:

Aquí esta la clase que lee los fixtures configurados en .yml

https://github.com/yepsua/open-skool/blob/master/src/OpenSkool/StaticResourcesBundle/DataFixtures/Faker/ORM/FakeFixtureLoader.php

Y aquí los archivos yml.

https://github.com/yepsua/open-skool/tree/master/src/OpenSkool/StaticResourcesBundle/Resources/fixtures/faker

Saludos.


El lunes, 8 de junio de 2015, 19:42:14 (UTC-4:30), Ludwring Liccien escribió:

Ludwring Liccien

unread,
Jun 17, 2015, 5:16:07 PM6/17/15
to symfo...@googlegroups.com
Saludos oyepez003 

Vi el Bundle que me recomendaste 

Lo que no me queda claro es como maneja las relaciones podrías darme un ejemplo de Usuario ManyToMany Roles

oyepez003

unread,
Jun 17, 2015, 5:45:25 PM6/17/15
to symfo...@googlegroups.com
Simple:

En tu yml roles seria:

Namespace\Bundle\Entity\Role:
  security_role_admin:
    name: ROLE_ADMIN
  security_role_user:
    name: ROLE_USER

Y tu yml usuarios seria:

Namespace\Bundle\Entity\User:
  user_admin:
    name: admin
    password: qwerty
    email: ad...@test.com
    role: @security_role_admin
  user_no_admin:
    name: oyepez
    password: 123
    email: oye...@test.com
    role: @security_role_user

Lo unico que debes tomar en cuenta es que debes crear primero los roles antes que los usuario sino te dara error doctrine.


protected function getFixtures()
    {
        return  array(
            ...
            __DIR__ . '/../../../Resources/fixtures/roles.yml',
            __DIR__ . '/../../../Resources/fixtures/users.yml',
            ...
        );
    }

Y así es la idea de realizar las relaciones en los fixtures con el "@".

Saludos.
Reply all
Reply to author
Forward
0 new messages