Cartographie PHP Symfony2


Table des matières

Référence
Fichiers PHP
Fonction statique
ClassMetadataBuilder
ClassMetadataInfo
Les "Set" généraux
Les "Set" Héritage
Setters mappage des champs
Setters rappel Lifecycle
Versionnage Setters
Getters général
Getters Identificateur
Getters Héritage
Changer Getters Suivi
Field & Getters Association
Getters rappel Lifecycle
ClassMetadata API

Référence

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/php-mapping.html

Doctrine2 vous permet aussi de fournir les métadonnées ORM sous la forme de code PHP en utilisant l'API ClassMetadata. Vous pouvez écrire du code dans les fichiers PHP ou à l'intérieur d'une fonction statique appelée loadMetadata($class) sur la classe entité elle-même.

Fichiers PHP

Si vous souhaitez écrire votre information de cartographie dans les fichiers PHP qui sont nommés d'après l'entité et inclus pour peupler le méta-données pour une entité, vous pouvez le faire en utilisant le PHPDriver:

<?php
$driver = new PHPDriver('/path/to/php/mapping/files');
$em->getConfiguration()->setMetadataDriverImpl($driver);

Maintenant, imaginez que nous avions une entité nommée Entities\User et nous avons voulu écrire un fichier de mapping pour l'utiliser au-dessus de l'instance PHPDriver configuré:

<?php
namespace Entities;

class User
{
    private $id;
    private $username;
}

Pour écrire les informations de cartographie il vous suffit de créer un fichier nommé Entities.User.php à l'intérieur de /path/to/php/mapping/files

<?php
// /path/to/php/mapping/files/Entities.User.php

$metadata->mapField(array(
   'id' => true,
   'fieldName' => 'id',
   'type' => 'integer'
));

$metadata->mapField(array(
   'fieldName' => 'username',
   'type' => 'string'
));

Maintenant, nous pouvons facilement récupérer l'instance peuplée ClassMetadata où le PHPDriver inclut le fichier et le ClassMetadataFactory il y ait mise en cache pour une utilisation ultérieure:

<?php
$class = $em->getClassMetadata('Entities\User');
// or
$class = $em->getMetadataFactory()->getMetadataFor('Entities\User');

Fonction statique

En plus des fichiers PHP, vous pouvez également spécifier vos informations de cartographie à l'intérieur d'une fonction statique définies sur la classe entité elle-même. Ceci est utile pour le cas où vous voulez garder votre entité et des informations de cartographie ensemble, mais ne veulent pas utiliser les annotations. Pour cela il vous suffit d'utiliser le StaticPHPDriver:

<?php
$driver = new StaticPHPDriver('/path/to/entities');
$em->getConfiguration()->setMetadataDriverImpl($driver);

Maintenant vous avez juste besoin de définir une fonction statique loadMetadata($metadata) appelée sur votre entité:

<?php
namespace Entities;

use Doctrine\ORM\Mapping\ClassMetadata;

class User
{
    // ...

    public static function loadMetadata(ClassMetadata $metadata)
    {
        $metadata->mapField(array(
           'id' => true,
           'fieldName' => 'id',
           'type' => 'integer'
        ));

        $metadata->mapField(array(
           'fieldName' => 'username',
           'type' => 'string'
        ));
    }
}

ClassMetadataBuilder

Pour faciliter l'utilisation de l'API ClassMetadata (qui est très brut) il y a un ClassMetadataBuilder que vous pouvez utiliser.

<?php
namespace Entities;

use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\Builder\ClassMetadataBuilder;

class User
{
    // ...

    public static function loadMetadata(ClassMetadata $metadata)
    {
        $builder = new ClassMetadataBuilder($metadata);
        $builder->createField('id', 'integer')->isPrimaryKey()->generatedValue()->build();
        $builder->addField('username', 'string');
    }
}

L'API de ClassMetadataBuilder a les méthodes suivantes :

Il a également plusieurs méthodes qui créent des constructeurs (qui sont nécessaires pour les mappages avancés):

ClassMetadataInfo

La classe ClassMetadataInfo est l'objet de données de base pour stocker les métadonnées de cartographie pour une seule entité. Il contient toutes les getters et setters que vous avez besoin d'alimenter et de récupérer des informations pour une entité.

Les "Set" généraux

Les "Set" Héritage

Setters mappage des champs

Setters rappel Lifecycle

Versionnage Setters

Getters général

Getters Identificateur

Getters Héritage

Changer Getters Suivi

Field & Getters Association

Getters rappel Lifecycle

ClassMetadata API

La classe ClassMetadata s'étend ClassMetadataInfo et ajoute les fonctionnalités d'exécution requis par la doctrine. Il ajoute quelques méthodes supplémentaires liés à la réflexion d'exécution pour travailler avec les entités elles-mêmes.