[Admin generator] Paramètre ‘table method’

Une petite astuce que j’utilise depuis longtemps mais que je n’avais jamais pensé à partager : optimiser le nombre de requêtes Doctrine et par la même occasion, un module d’admin generator.

J’ai un module d’admin generator article lié au modèle Article.

  • schema.yml
Article:
  connection: doctrine
  actAs:
    Timestampable: ~
    Taggable: ~
    Sluggable:
      fields: [titre]
      name: slug
      type: string
      length: 255
      unique: true
      canUpdate: true
  columns:
    titre:
      type: string(255)
      notnull: true
    # et d'autres champs
    id_auteur:
      type: integer
      notnull: true
  relations:
    Auteur:  { class: vjGuardUserProfile, onDelete: SET NULL, onUpdate: CASCADE, local: id_auteur, foreign: id }
  • generator.yml
 list:
 title: Liste des articles
 display: [titre, date_publication, Auteur]
 max_per_page: 5
 table_method: retrieveBackend
  • ArticleTable.class.php
public function retrieveBackend(Doctrine_Query $q)
{
  $rootAlias = $q->getRootAlias($q);
  $q->leftJoin($rootAlias.'.Auteur au');
  return $q;
}

Dans cet exemple, je passe de 6 requêtes Doctrine pour l’affichage de 5 lignes à 3 requêtes.

Ce n’est pas énorme mais sur 20 lignes et 3 relations, on passe de 63 requêtes à

3 requêtes !

Sisi !

Alors, abusez-en !

Que de news : sf1.2.10, 1.3, 1.4 et un nouveau livre !

Bonjour à tous !

Je souhaitais écrire un petit mot mardi mais quand le planning est chargé, tout n’est pas possible !

Bref, si comme moi mardi, vous étiez à suivre le blog de symfony, vous avez du passer une journée excitante à souhait !

Pour commencer, la version 1.2.10 de symfony a été publiée. Loin d’être une révolution (ce n’est qu’une évolution :p), elle corrige un certain nombre de bugs et ajoute une tâche fort sympatique : symfony project:validate
Que peut bien faire cette tâche ? Très simplement, elle va vous aider lors de votre migration vers symfony 1.3/1.4. En effet, elle propose de matcher le stuff déprécié dans symfony 1.3 et supprimé dans la 1.4. Pour avoir testé une migration, c’est en effet appréciable !

Bon, c’était l’entrée. Maintenant, le plat de résistance : publication des versions stables de symfony 1.3 et symfony 1.4 ! Je ne vais pas lister à nouveau l’ensemble des nouveautés ou des mises à jour, tout est sur le site officiel. Sachez tout de même qu’il va falloir penser à migrer dans un futur proche.

Et pour finir, le dessert : publication du calendrier de l’avent 2009 de symfony ! Pour les non-initiés, le calendrier de l’avent chez symfony consiste en gros en un tutoriel découpé en 24 étapes qui commence le 1er décembre et se termine le 24. Chaque jour, une nouvelle étape est publiée et au final, un livre est mis en vente. Pour les débutants, vous pouvez retrouver les précédents tutoriaux : Askeet et Jobeet (je vous conseille Jobeet car plus récent). Le nouveau tutoriel propose en fait plusieurs tutoriaux et est principalement destiné aux utilisateurs avertis de symfony.
Il propose des sujets plus avancés de symfony (surcharge du routing, formulaires avancés, héritage et Doctrine, etc…). Le plus important sans doute dans ce tutoriel/livre est le fait qu’il a été rédigé par la communauté ! Non, non, vous ne rêvez pas ! Je vous laisse découvrir toutes ces informations directement sur le site mais sachez également que ce livre va être disponible pour le moment en 5 langues (dont le français !!!) et que la version anglaise est déjà en vente.

J’avoue avoir été totalement rassasié après toutes ces informations et quand je vois le travail accompli par l’équipe de symfony et par la communauté, je suis fier d’en faire partie !

Bon, en ce moment, je ne livre pas beaucoup d’aides ou d’astuces mais plus d’informations que vous connaissez sans doute déjà mais j’avoue ne pas avoir énormément de temps pour cela. Avec les nouvelles versions de symfony, j’espère pouvoir rapidement vous aider avec de nouveaux tutoriaux !

Vive symfony ! Vive la communauté symfony !

symfony 1.2.9 & 1.3.0 alpha1

Retour de vacances et quelle surprise de voir deux nouvelles version de symfony disponibles !

symfony 1.2.9
47 mises à jour ou correctifs au programme de cette version mineure, avant-dernière version de la branche 1.2. Qui dit version mineure dit peu de modifications : Doctrine passe de la version 1.0.10 à la 1.0.12, quelques correctifs pour les formulaires et l’admin generator, la désactivation par défaut du cache du routing, une mise à jour du framework de test Lime et surtout, la compatibilité quasi assurée avec PHP 5.3 !

Je vous laisse découvrir tout cela directement sur le site officiel.

symfony 1.3.0 alpha1
En voilà une bonne nouvelle ! La première version testable de la prochaine branche de symfony ! Bon ok, il s’agit d’une version alpha non stable mais c’est déjà un premier aperçu du futur proche de symfony.
Je ne vais pas citer toutes les nouveautés ou modifications (vous pouvez les retrouver ici) mais juste les plus importantes :
- hausse importante des performances (réécriture importante du framework de routing, nouvelle tâche permettant de mettre en cache la structure complète des répertoires du projet, …)
- Doctrine est maintenant l’ORM par défaut de symfony (Propel est toujours utilisable)
- ajout du mailer Swift Mailer par défaut dans le core de symfony (un plugin de moins à installer !)
- de nombreuses amélioration du framework de formulaires
- ajout de deux entrées dans la web debug toolbar : « view » et « mailer »
- nouvel autoloader pour l’environnement de développement évitant le récurrent symfony cc !

Voilà quelques unes des nombreuses nouveautés de la version 1.3.0 ! N’hésitez pas à la tester et à envoyer vos feedback à l’équipe de symfony !

Que peut-on mettre de spécial dans le fichier generator.yml ?

Allez, en route pour la première astuce !

Outre les paramètres standards sur lesquels je ne m’étendrai pas (Documentation officielle), je me suis rendu compte que certains paramètres supplémentaires n’étaient pas très explicites (surtout depuis les modifications de l’admin generator entre la 1.0 et la 1.1/1.2).  Je vais donc vous retranscrire ce que j’ai pu trouver lors de mes recherches :


- params est ignoré (paramètre utilisé en version 1.0)


- correspond au nom du champ qui sera affiché entre les balises label du formulaire

numero_dossier:  {label: Numéro }

- permet d’afficher une popup de confirmation

confirm: Etes-vous sûr de vouloir supprimer cette fiche ?

- récupère la valeur d’un champ dans le fichier app.yml

type:
  label: <?php echo sfConfig::get('app_label_type') ?>

- format de date

date_format: dd/MM/yyyy

- permet d’afficher un texte sous le champ de formulaire

help: "1 à 9 (voir plan)"

- attributs HTML qui seront appliqués au champ correspondant

attributes: { readonly: true, class: ma_classe }