Aller au menu - Aller au contenu

Icône Personnalisation

Avatar
Mise à jour : 04/09/2010
Difficulté : Facile Facile Creative Commons BY-NC-SA
487 visites depuis 7 jours, dont 2 sur ce chapitre classé 233/786
Doctrine nous permet de personnaliser pas mal de choses dans sa configuration.
Doctrine gère tout cela en Cascade, c'est-à-dire que l'on peut personnaliser certains aspects à plusieurs niveaux.

Le niveau le plus global est au niveau de Doctrine_Manager. Mais, bien entendu, il est possible de gérer tout cela plus finement.

Par exemple, nous pouvons récupérer les résultats de toutes les requêtes de différentes manières. On peut définir cela globalement ; par exemple, on choisit de récupérer des objets complets à chaque fois. Mais il reste tout à fait possible, au niveau de la requête elle-même par exemple, de dire « Cette fois, je veux juste récupérer un tableau contenant certaines propriétés, et non l'objet en entier ».

Notez que je rédigerai prochainement un chapitre spécifique sur l'Hydratation des résultats.
Chapitre précédent Sommaire

Avec Doctrine_Manager

Doctrine_Manager possède une méthode setAttribute() qui permet de changer certains... attributs !

Comment ça marche ?



Tout simplement, en appelant la méthode citée :

Code : PHP
1
2
3
4
5
<?php
$manager = Docrine_Manager::getInstance();

$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true);


Les attributs possibles sont définis dans Doctrine_Core et sont de la forme ATTR_NOM_DE_LATTRIBUT.
Leurs valeurs possibles sont des constantes de la forme NOM_DE_LATTRIBUT_VALEUR.

Détail des principaux attributs



ATTR_VALIDATE



Je mettrai prochainement en ligne un chapitre consacré à la validation des données. Nous parlerons plus en détail de cet attribut à ce moment-là.


Cet attribut indique la manière dont Doctrine va valider les données ; par exemple, si l'on doit forcer un champ déclaré de type integer à contenir bel et bien un nombre entier.
Les valeurs disponibles sont :
  • VALIDATE_ALL (correspond à l'ensemble des validateurs suivants) ;
  • VALIDATE_LENGTHS ;
  • VALIDATE_TYPES ;
  • VALIDATE_CONSTRAINTS ;
  • VALIDATE_NONE.


Notez que l'on peut combiner plusieurs valeurs avec l'opérateur bit-à-bit « | ». Par exemple :
Code : PHP
1
2
<?php
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_LENGTHS | Doctrine_Core::VALIDATE_TYPES);


ATTR_AUTO_ACCESSOR_OVERRIDE



Autorise ou non la redéfinition des accesseurs, c'est-à-dire, la possibilité ou non de créer une méthode getProperty() pour accéder à la colonne property. L'intérêt est de pouvoir effectuer des traitements avant de renvoyer la valeur.

Valeurs possibles : true ou false.

ATTR_AUTOLOAD_TABLE_CLASSES



Indique si Doctrine doit ou non charger les classes de table (ArticleTable par exemple) automatiquement.

Valeurs possibles : true ou false. Je vous recommande de le laisser à true si vous les utilisez. Dans le cas contraire, cela améliorera (légèrement...) les performances.

ATTR_MODEL_LOADING



Indique la manière dont Doctrine va charger les modèles.

Les valeurs possibles sont :
  • MODEL_LOADING_AGGRESSIVE : Doctrine inclut TOUS les modèles trouvés, même ceux que vous n'utilisez pas.
  • MODEL_LOADING_CONSERVATIVE : stocke simplement le chemin de chaque fichier contenant un modèle, et l'inclu uniquement SI BESOIN.
  • MODEL_LOADING_PEAR : ne précharge pas les modèles, vérifie à chaque appel dans le dossier indiqué à loadModels() (souvenez-vous ^^ ) si le modèle existe.


ATTR_USE_DQL_CALLBACKS



Cet attribut indique si oui ou non les hooks DQL doivent être appelés. Reportez-vous au chapitre sur les Events Listeners pour plus de détails sur ces hooks.

Valeurs possibles : true ou false.

Attention, cet attribut est à false par défaut. Ceci signifie que vous devez explicitement le définir à true, quelque part dans votre application, pour utiliser les hooks DQL.

ATTR_QUOTE_IDENTIFIER



Cet attribut indique à Doctrine qu'il doit encapsuler tous les noms de tables, champs, etc. dans des délimiteurs.
Pour info, MySQL utilise les backticks (`), Oracle utilise les guillemets doubles ("), Access utilise les crochets ([ et ]), etc.

Attention. N'utilisez jamais ces délimiteurs en dur dans votre code. Cela CASSE la portabilité de votre application, ce qui est justement tout l'inverse de ce que l'on veut avec Doctrine !


Valeurs possibles : true ou false. Je vous conseille de le mettre à true uniquement si vous avez des problèmes lors de l'exécution de requêtes.
Chapitre précédent Sommaire

Partager

12 commentaires pour "Personnalisation"
Note moyenne : 3.54 / 4 (35 votes)
Pseudo Commentaire
Hors ligne jordan # Posté le 30/06/2010 à 18:19:20
Développeur professionnel
Avatar
Flux RSS

Ville : Couternon
Pays : France métropolitaine
Études : Université de Dijon

Mon point de vue :

SGBDR → YML
- pas de détection des contraintes uniques (ni d'index mais ce n'est pas bloquant) ;
- pas de détection des comportements (behaviors) ;
- pas de reconnaissance des booléens.

YML → SGBDR

- trop verbeux si fait rigoureusement ;
- pas de coloration adaptée dans l'éditeur.
Hors ligne Cybermanu # Posté le 30/06/2010 à 18:53:32
Avatar

Avis : Très bon

Ville : Hostun
Pays : France métropolitaine

D'où ma décision ;)

Et le défaut de coloration syntaxique, ça dépend de l'éditeur que tu utilise. PHPEdit est capable de le colorer très bien.

Pour la verbosité... c'est pas faux. ^^

Mais je trouve qu'il est plus simple d'avoir toute sa configuration dans un seul fichier.

Programmeur : c'est celui qui résout pour toi, de façon incompréhensible, un problème que tu ne savais pas que tu avait... :p
Image utilisateur

Apprenez à utiliser un ORM pour PHP : Doctrine !
 
Hors ligne Nami Doc # Posté le 30/06/2010 à 22:22:11
Lamaer taler dansk

Avis : Très bon

NetBeans colore très bien le YAML et ça n'est pas gênant du tout d'en faire avec ... Vive la génération depuis le YAML ;o) !

La flemme conquerra le monde !
Secret (cliquez pour afficher)
Image utilisateur
 
Hors ligne shmurtzy # Posté le 30/10/2010 à 05:34:13
Avatar

Merci beaucoup pour ce superbe tutorial !

Apprendre les bases de Doctrine n'est pas une mince affaire. Le manuel officiel, si il est très complet est loin d'être construit avec une approche utilisation.

Pour cela je trouve que ton aide est inestimable, surtout que les aides dans la langue de Molière ne courent pas le web.

J'ai commencé à utiliser Doctrine pour un framework MVC maison en mai 2010, et comme on dit souvent après coup : si j'avais lu ça avant de commencer, je me serai épargné quelques maux de tête !

Un gros gros merci !
Hors ligne Cybermanu # Posté le 30/10/2010 à 11:40:46
Avatar

Avis : Très bon

Ville : Hostun
Pays : France métropolitaine

Merci
C'est toujours agréable de savoir que ce qu'on fait est utile ^^

Programmeur : c'est celui qui résout pour toi, de façon incompréhensible, un problème que tu ne savais pas que tu avait... :p
Image utilisateur

Apprenez à utiliser un ORM pour PHP : Doctrine !
 

Voir tous les commentaires
Ce tutoriel a été corrigé par les zCorrecteurs.