public function generate(BundleInterface $bundle, $entity, $format, array $fields)
    {
        // configure the bundle (needed if the bundle does not contain any Entities yet)
        $config = $this->registry->getManager(null)->getConfiguration();
        $config->setEntityNamespaces(array_merge(
            array($bundle->getName() => $bundle->getNamespace().'\\Entity'),
            $config->getEntityNamespaces()
        ));

        $entityClass = $this->registry->getAliasNamespace($bundle->getName()).'\\'.$entity;
        $entityPath = $bundle->getPath().'/Entity/'.str_replace('\\', '/', $entity).'.php';
        if (file_exists($entityPath)) {
            throw new \RuntimeException(sprintf('Entity "%s" already exists.', $entityClass));
        }

        $class = new ClassMetadataInfo($entityClass, $config->getNamingStrategy());
        $class->customRepositoryClassName = str_replace('\\Entity\\', '\\Repository\\', $entityClass).'Repository';
        $class->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
        $class->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
        foreach ($fields as $field) {
            $class->mapField($field);
        }

        $entityGenerator = $this->getEntityGenerator();
        if ('annotation' === $format) {
            $entityGenerator->setGenerateAnnotations(true);
            $class->setPrimaryTable(array('name' => Inflector::tableize(str_replace('\\', '', $entity))));
            $entityCode = $entityGenerator->generateEntityClass($class);
            $mappingPath = $mappingCode = false;
        } else {
            $cme = new ClassMetadataExporter();
            $exporter = $cme->getExporter('yml' == $format ? 'yaml' : $format);
            $mappingPath = $bundle->getPath().'/Resources/config/doctrine/'.str_replace('\\', '.', $entity).'.orm.'.$format;

            if (file_exists($mappingPath)) {
                throw new \RuntimeException(sprintf('Cannot generate entity when mapping "%s" already exists.', $mappingPath));
            }

            $mappingCode = $exporter->exportClassMetadata($class);
            $entityGenerator->setGenerateAnnotations(false);
            $entityCode = $entityGenerator->generateEntityClass($class);
        }
        $entityCode = str_replace(
            array("@var integer\n", "@var boolean\n", "@param integer\n", "@param boolean\n", "@return integer\n", "@return boolean\n"),
            array("@var int\n", "@var bool\n", "@param int\n", "@param bool\n", "@return int\n", "@return bool\n"),
            $entityCode
        );

        self::mkdir(dirname($entityPath));
        self::dump($entityPath, $entityCode);

        if ($mappingPath) {
            self::mkdir(dirname($mappingPath));
            self::dump($mappingPath, $mappingCode);
        }

        $path = $bundle->getPath().str_repeat('/..', substr_count(get_class($bundle), '\\'));
        $this->getRepositoryGenerator()->writeEntityRepositoryClass($class->customRepositoryClassName, $path);
        $repositoryPath = $path.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $class->customRepositoryClassName).'.php';

        return new EntityGeneratorResult($entityPath, $repositoryPath, $mappingPath);
    }
public function generate(BundleInterface $bundle, $entity, $format, array $fields)
    {
        
        $config = $this->registry->getManager(null)->getConfiguration();
        $config->setEntityNamespaces(array_merge(
            array($bundle->getName() => $bundle->getNamespace().'\\Entity'),
            $config->getEntityNamespaces()
        ));

        $entityClass = $this->registry->getAliasNamespace($bundle->getName()).'\\'.$entity;
        $entityPath = $bundle->getPath().'/Entity/'.str_replace('\\', '/', $entity).'.php';
        if (file_exists($entityPath)) {
            throw new \RuntimeException(sprintf('Entity "%s" already exists.', $entityClass));
        }

        $class = new ClassMetadataInfo($entityClass, $config->getNamingStrategy());
        $class->customRepositoryClassName = str_replace('\\Entity\\', '\\Repository\\', $entityClass).'Repository';
        $class->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
        $class->setIdGeneratorType(ClassMetadataInfo::GENERATOR_TYPE_AUTO);
        foreach ($fields as $field) {
            $class->mapField($field);
        }

        $entityGenerator = $this->getEntityGenerator();
        if ('annotation' === $format) {
            $entityGenerator->setGenerateAnnotations(true);
            $class->setPrimaryTable(array('name' => Inflector::tableize(str_replace('\\', '', $entity))));
            $entityCode = $entityGenerator->generateEntityClass($class);
            $mappingPath = $mappingCode = false;
        } else {
            $cme = new ClassMetadataExporter();
            $exporter = $cme->getExporter('yml' == $format ? 'yaml' : $format);
            $mappingPath = $bundle->getPath().'/Resources/config/doctrine/'.str_replace('\\', '.', $entity).'.orm.'.$format;

            if (file_exists($mappingPath)) {
                throw new \RuntimeException(sprintf('Cannot generate entity when mapping "%s" already exists.', $mappingPath));
            }

            $mappingCode = $exporter->exportClassMetadata($class);
            $entityGenerator->setGenerateAnnotations(false);
            $entityCode = $entityGenerator->generateEntityClass($class);
        }
        $entityCode = str_replace(
            array("@var integer\n", "@var boolean\n", "@param integer\n", "@param boolean\n", "@return integer\n", "@return boolean\n"),
            array("@var int\n", "@var bool\n", "@param int\n", "@param bool\n", "@return int\n", "@return bool\n"),
            $entityCode
        );

        self::mkdir(dirname($entityPath));
        self::dump($entityPath, $entityCode);

        if ($mappingPath) {
            self::mkdir(dirname($mappingPath));
            self::dump($mappingPath, $mappingCode);
        }

        $path = $bundle->getPath().str_repeat('/..', substr_count(get_class($bundle), '\\'));
        $this->getRepositoryGenerator()->writeEntityRepositoryClass($class->customRepositoryClassName, $path);
        $repositoryPath = $path.DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $class->customRepositoryClassName).'.php';

        return new EntityGeneratorResult($entityPath, $repositoryPath, $mappingPath);
    }
public function generate ( BundleInterface $ bundle , $ entity , $ format , array $ fields ) { // configure the bundle (needed if the bundle does not contain any Entities yet) $ config = $ this -> registry -> getManager ( null ) -> getConfiguration ( ) ; $ config -> setEntityNamespaces ( array_merge ( array ( $ bundle -> getName ( ) => $ bundle -> getNamespace ( ) . '\\Entity' ) , $ config -> getEntityNamespaces ( ) ) ) ; $ entityClass = $ this -> registry -> getAliasNamespace ( $ bundle -> getName ( ) ) . '\\' . $ entity ; $ entityPath = $ bundle -> getPath ( ) . '/Entity/' . str_replace ( '\\' , '/' , $ entity ) . '.php' ; if ( file_exists ( $ entityPath ) ) { throw new \ RuntimeException ( sprintf ( 'Entity "%s" already exists.' , $ entityClass ) ) ; } $ class = new ClassMetadataInfo ( $ entityClass , $ config -> getNamingStrategy ( ) ) ; $ class -> customRepositoryClassName = str_replace ( '\\Entity\\' , '\\Repository\\' , $ entityClass ) . 'Repository' ; $ class -> mapField ( array ( 'fieldName' => 'id' , 'type' => 'integer' , 'id' => true ) ) ; $ class -> setIdGeneratorType ( ClassMetadataInfo :: GENERATOR_TYPE_AUTO ) ; foreach ( $ fields as $ field ) { $ class -> mapField ( $ field ) ; } $ entityGenerator = $ this -> getEntityGenerator ( ) ; if ( 'annotation' === $ format ) { $ entityGenerator -> setGenerateAnnotations ( true ) ; $ class -> setPrimaryTable ( array ( 'name' => Inflector :: tableize ( str_replace ( '\\' , '' , $ entity ) ) ) ) ; $ entityCode = $ entityGenerator -> generateEntityClass ( $ class ) ; $ mappingPath = $ mappingCode = false ; } else { $ cme = new ClassMetadataExporter ( ) ; $ exporter = $ cme -> getExporter ( 'yml' == $ format ? 'yaml' : $ format ) ; $ mappingPath = $ bundle -> getPath ( ) . '/Resources/config/doctrine/' . str_replace ( '\\' , '.' , $ entity ) . '.orm.' . $ format ; if ( file_exists ( $ mappingPath ) ) { throw new \ RuntimeException ( sprintf ( 'Cannot generate entity when mapping "%s" already exists.' , $ mappingPath ) ) ; } $ mappingCode = $ exporter -> exportClassMetadata ( $ class ) ; $ entityGenerator -> setGenerateAnnotations ( false ) ; $ entityCode = $ entityGenerator -> generateEntityClass ( $ class ) ; } $ entityCode = str_replace ( array ( "@var integer\n" , "@var boolean\n" , "@param integer\n" , "@param boolean\n" , "@return integer\n" , "@return boolean\n" ) , array ( "@var int\n" , "@var bool\n" , "@param int\n" , "@param bool\n" , "@return int\n" , "@return bool\n" ) , $ entityCode ) ; self :: mkdir ( dirname ( $ entityPath ) ) ; self :: dump ( $ entityPath , $ entityCode ) ; if ( $ mappingPath ) { self :: mkdir ( dirname ( $ mappingPath ) ) ; self :: dump ( $ mappingPath , $ mappingCode ) ; } $ path = $ bundle -> getPath ( ) . str_repeat ( '/..' , substr_count ( get_class ( $ bundle ) , '\\' ) ) ; $ this -> getRepositoryGenerator ( ) -> writeEntityRepositoryClass ( $ class -> customRepositoryClassName , $ path ) ; $ repositoryPath = $ path . DIRECTORY_SEPARATOR . str_replace ( '\\' , DIRECTORY_SEPARATOR , $ class -> customRepositoryClassName ) . '.php' ; return new EntityGeneratorResult ( $ entityPath , $ repositoryPath , $ mappingPath ) ; }
@param BundleInterface $bundle
@param string          $entity
@param string          $format
@param array           $fields

@return EntityGeneratorResult

@throws \Doctrine\ORM\Tools\Export\ExportException
@param BundleInterface $bundle @param string $entity @param string $format @param array $fields