Ma question générale est de savoir comment créer des entités et des référentiels avec symfony2.
Mes solutions (je ne sais pas si c'est bon, meilleure pratique!?)
YML
Créez le fichier " Entities.User.dcm.yml " dans HelloBundle/Resources/config/doctrine/metadata/orm avec ce code (par exemple):
Entities\User:
type: entity
table: users
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
length: 50
Alors
php app/console doctrine:mapping:import "HelloBundle" yml
php app/console doctrine:generate:entities "HelloBundle"
Ensuite, vous pouvez le tester dans votre contrôleur avec:
$user = new \Sensio\HelloBundle\Entity\User;
$user->setName('Acubens');
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($user);
$em->flush();
ou avecPHP
Créez le fichier "User.php" dans HelloBundle\Entity avec ce code
// Sensio/HelloBundle/Entity/User.php
namespace Sensio\HelloBundle\Entity;
/**
* @orm:Entity
*/
class User
{
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @orm:Column(type="string", length="255")
*/
protected $name;
}
Alors
php app/console doctrine:mapping:import "HelloBundle"
cela générera dans "HelloBundle/Resources/config/doctrine/metadata/orm"
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Sensio\HelloBundle\Entity\User" table="user">
<change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
<id name="id" type="integer" column="id">
<generator strategy="IDENTITY"/>
</id>
<field name="name" type="string" column="name" length="255"/>
<lifecycle-callbacks/>
</entity>
</doctrine-mapping>
Then delete User.php
php app/console doctrine:generate:entities "HelloBundle"
Après avoir créé un nouveau fichier Nice, User.php
<?php
namespace Sensio\HelloBundle\Entity;
/**
* Sensio\HelloBundle\Entity\User
*/
class User
{
/**
* @var string $name
*/
private $name;
/**
* @var integer $id
*/
private $id;
/**
* Set name
*
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* Get name
*
* @return string $name
*/
public function getName()
{
return $this->name;
}
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
}
Et vous comment allez-vous? Pourquoi dois-je spécifier HelloBundle dans mes commandes?
ps : mon fichier config.yml
doctrine.dbal:
driver: pdo_mysql
dbname: sf2
user: root
password:
logging: %kernel.debug%
doctrine.orm:
auto_generate_proxy_classes: %kernel.debug%
mappings:
HelloBundle: ~
Si vous utilisez une annotation YML pour générer votre schéma, vous pouvez avoir ceci:
Namespace\NameBundle\Entity\Build:
type: entity
repositoryClass: Namespace\NameBundle\Entity\Repository\BuildRepository
...
lors de l'utilisation de la ligne de commande app/console doctrine: generate: entités NamespaceNameBundle Ceci générerait automatiquement votre entité et votre classe de référentiel
http://docs.symfony-reloaded.org/guides/doctrine/orm/index.html
Cette section devrait contenir toutes les informations dont vous avez besoin.
Bien que Symfony2 soit actuellement en phase de stabilisation, la dernière version de PR6 ne contient toujours pas beaucoup de fonctionnalités et la situation devrait changer avec la version RC1. N'ayez pas peur de plonger dans le code et de comprendre vous-même les choses.
Je cherchais une solution utilisant la cartographie YML, car elle ne figure nulle part dans le livre. Après avoir chuté un peu, j'ai constaté que vos mappages devraient suivre ces règles:
J'espère que ça aide.
Je pense que vous devez choisir entre la création de classe ou la configuration yml. Si vous créez une classe d'entité et le fichier config yml, puis exécutez doctrine: generate: entités Vous avez une erreur. Je vous recommande à vous de coller avec le style de classe avec des annotations, puis utilisez $ php application/console doctrine: base de données: créer $ php application/console doctrine: schema: créer