OrphanRemoval et Persistance transitive avec Doctrine2

On va voir dans cet article comment supprimer automatiquement des objets qui ne sont plus référencés par leur objet parent.

Prenons l’exemple d’un objet Day qui comporte un ou plusieurs objet Event. Imaginons que nous ayons un formulaire nous permettant d’ajouter et supprimer des objets Events (dans notre formulaire un champ de type Collection) via du javascript. Si on supprime un des éléments de la collection des Event, et qu’on soumet le formulaire, Doctrine2 ne va pas supprimer l’objet tout seul alors que c’est le but souhaité.

Voyons d’abord le principe et comment résoudre ce problème:

Lorsqu’on souhaite qu’une opération soit cascadée le long d’une association, on va indiquer dans le mapping par exemple:
cascade={"persist"}

Survol de la GoogleMaps Api v3

Beaucoup d’entre vous ont certainement déjà eu l’occasion de jouer avec l’api javascript de GoogleMaps. Elle est performante, bien documentée, et plutôt instinctive à implémenter. De plus il éxiste énormément de ressources sur le web proposant des exemples d’utilisation.
On trouve cependant encore peu de ressources mentionnant la dernière mouture de l’api, la v3, qui simplifie et éclaircie encore plus son utilisation. Ce petit article va survoler quelques exemples d’utilisation de celle-ci.

Astuces de développement javascript avec symfony

Dans cet article nous allons voir quelques astuces et bonnes pratiques, non pas directement de développement symfony mais de développement javascript au sein d’un projet symfony.

Si l’on reprend quelques bases de bonnes pratiques de développement javascript, on constate :

  • que vos javascripts doivent être non-intrusifs, autrement dit là pour améliorer l’expérience utilisateur et en aucun cas être indispensable au fonctionnement d’une page ;
  • que les javascript doivent être combinés en 1 seul fichier et minifié (ceci afin de limiter le nombre de requête HTTP et car le chargement de la page est arrêté à chaque balise script, notamment à cause d’un éventuel document.write(); ;
  • que l’appel au javascript doit être en bas de page ;

Cette liste est bien entendu non exhaustive, vous trouverez une liste plus détaillée par ici.

Toutes ces bonnes pratiques de développement Javascript n’ont pas toujours été facilitées dans symfony, notamment à la grande époque des helpers link_to_remote() & co. qui en ont ravi certains et fait cauchemarder d’autres. Et aujourd’hui encore bon nombre de widgets de formulaire retournent directement du code javascript (dépendant de jQuery ou autre) et qui ne fonctionneront évidemment plus dès lors que vos javascripts se trouveront en bas de page.

Du Javascript dynamique dans une vue en utilisant sf_format

Il arrive que l’on ai besoin d’utiliser un script javascript spécifique dans une vue. Un script dynamique qui nécessite d’être renseigné par des informations de php (utiliser des variables ou des méthodes de nos objets).

Dans mon précédent post j’évoquais les différentes possibilités d’inclure le javascript dans les vues.

  • Mettre des balises <script> directement au milieu du html (un peu crade mais efficace)
  • Faire un fichier .js « en dur » dans le dossier /web/js (mais là on perd la possibilité d’utiliser du php)
  • Utiliser un slot dans le <head> du template
  • Utiliser une vue

C’est ce dernier point que je vous propose de voir aujourd’hui.