Par défaut, le framework Symfony 2 (version PR7) est paramétré avec le nom de base de donnée « Symfony » attendu sur le localhost, avec le user root, sans mot de passe.
Toutes ces infos se trouvent dans le fichier parameters.ini de votre dossier app/config.
Si vous travaillez dans un Bundle qui n’est pas encoré déclaré, pensez à le rajouter dans le fichier app/config/config.yml
orm:
auto_generate_proxy_classes: %kernel.debug%
mappings:
AcmeDemoBundle: ~
AccueilBundle: ~
Ensuite, on crée notre entité (c’est notre future table) :
php app/console doctrine:generate:entity AccueilBundle Player
Attention c’est ici que cela se complique, Symfony2 génère 2 fichiers à 2 endroits différents. Mais nous avons des objets quasiment vide ! L’astuce pour pallier à cela est d’enrichir à la main le début du fichier xml généré. Nous allons enrichir notre définition des entités. Cependant il nous faudra regénérer ou mettre à jour l’entité déjà créée ! Et çà c’est galère, il doit y avoir plus simple mais en attendant voici le le truc utilisé pour contourner.
Aller dans Symfony\Bundle\DoctrineBundle\Command\GenerateEntitiesDoctrineCommand.php, et modifier par exemple comme ceci:
protected function configure()
{
$this
->setName('doctrine:generate:entities')
->setDescription('Generate entity classes and method stubs from your mapping information.')
->addArgument('bundle', InputArgument::REQUIRED, 'The bundle to initialize the entity or entities in.')
->addOption('entity', null, InputOption::VALUE_OPTIONAL, 'The entity class to initialize (shortname without namespace).')
->addOption('update-entities',null, InputOption::VALUE_OPTIONAL,'update')
->addOption('regenerate-entities',null, InputOption::VALUE_OPTIONAL,'regenerate')
On modifie maintenant notre définition des données dans C:\wamp\www\Symfony\src\Application\AccueilBundle\Resources\config\doctrine\metadata\orm\Application.AccueilBundle.Entity.Player.dcm.xml. Selon la doc sur symfony.com, je rajoute un champs « name » :
<?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="Application\AccueilBundle\Entity\Player">
<change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
<id name="id" type="integer" column="id">
<generator strategy="AUTO"/>
</id>
<field name="name" column="name" type="string" length="255" />
<lifecycle-callbacks/>
</entity>
</doctrine-mapping>
Ensuite, je demande à remettre à jour regénérer mon entity :
php app/console doctrine:generate:entities --regenerate-entities="player" "AccueilBundle"
Vous pouvez maintenant aller vérifier votre class php dans le dossier Entity du bundle, vous devez avoir :
<?php
namespace Application\AccueilBundle\Entity;
/**
* Application\AccueilBundle\Entity\Player
*/
class Player
{
/**
* @var integer $id
*/
private $id;
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
/**
* @var string $name
*/
private $name;
/**
* Set name
*
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* Get name
*
* @return string $name
*/
public function getName()
{
return $this->name;
}
}
Maintenant, pour créer la base de donnée, si ce n’est déjà fait, dans votre invite de commande DOS, saisisez ceci :
php app/console doctrine:database:create
php app/console doctrine:schema:create
Vous pouvez vérifier la création de vos tables dans PhpMyAdmin, vous devez y trouver votre table « player » avec 2 champs : id, name.
C’est tout pour le moment !