Share Button

Read the English version

Au cours de récents projets, nous avons été amenés à travailler sur des moteurs de recherche dans des domaines complètement différents :

  • 2 moteurs de recherche multi-critères front-office (orientés utilisateurs)
  • 2 moteurs de recherche multi-critère back-office (orientés administrateurs)
  • un moteur de statistiques (calculs, aggrégations, sommes, moyennes, …)

Réaliser ces moteurs sur une base de données se serait révélé coûteux (en temps de développement mais aussi au niveau des performances) pour des résultats mitigés (aussi bien au niveau statistiques, qu’au niveau recherche “texte”).

Pour cela, nous nous sommes tournés vers Elasticsearch : moteur de recherche basé sur Lucene. Voici le résultat de nos péripéties : 11 articles.
Continue reading

Share Button

Share Button

Read the English version

Comme REST doit être sans état (stateless) :

chaque requête d’un client vers un serveur doit contenir toute l’information nécessaire pour permettre au serveur de comprendre la requête, sans avoir à dépendre d’un contexte conservé sur le serveur. Cela libère de nombreuses interactions entre le client et le serveur.

Article Wikipedia sur REST

Nous avions besoin d’ajouter un nouvel authentication provider dans Symfony2 pour respecter cette contrainte. Nous avons choisi WSSE.

Cet article explique comment configurer WSSE sur Symfony, comment l’utiliser avec FOSRestBundle et tester le tout avec Google Chrome.
Continue reading

Share Button

Share Button

Read the English version

Après avoir publié un article sur la configuration WSSE dans Symfony, nous avons reçu beaucoup de questions sur l’utilisation de WSSE dans une application Android. Nous espérons que cet article répondra à ces questions!
Notez que nous ne parlerons que WSSE et que nous n’aborderons pas la conception d’un client rest dans une application Android.
Continue reading

Share Button

Share Button

Read the English version

Comme nous avions besoin d’une connexion entre une application web Symfony et une appli Android, nous avons dû apprendre et comprendre comment créer une API Rest de manière simple et sécurisée, en nous basant sur nos entités existantes.

Nous avons choisi WSSE pour l’accès sécurisé, FOSRestBundle pour la restitution de données et JMSSerializerBundle pour la sérialisation. 

Nous avions également besoin de séparer les logs pour les erreurs d’authentification WSSE. Lisez notre article pour savoir comment créer un fichier de logs séparé avec Monolog (en anglais).

Continue reading

Share Button

Share Button

Read the English version
Récemment, j’ai dû exporter un gros volume de données dans un fichier csv. C’est facile et rapide à faire si vous ne vous souciez pas de la mémoire utilisée et de l’expérience utilisateur. Je voulais que la consommation de mémoire n’augmente pas en fonction du volume de données.

Je me suis inspiré de cet article de blog mais, malgré ce qui est écrit dans le billet, des tests ont montré que la consommation de mémoire augmentait rapidement si le volume de données augmentait.

Continue reading

Share Button

Share Button

Read the English version

Ce billet traite d’elasticsearch qui est un moteur de recherche très puissant.
La plus grande difficulté que nous avons rencontrée est que nous ne savions pas comment bien configurer Elasticsearch pour obtenir des résultats de recherche pertinents. Une autre difficulté est (désolé de le dire) que la documentation officielle n’est pas très bien faite. Ok, c’est mon opinion et je suis obligé d’admettre que j’y ai trouvé des informations très utiles, mais parfois, les informations y sont difficiles à trouver.
En conséquence, nous avons mis les mains dans elasticsearch pour comprendre comment il fonctionne. Et nous pensons que nous avons fini par comprendre plein de choses que nous ne savions pas, et nous avons trouvé une (presque?) parfaite configuration.

Continue reading

Share Button

Share Button

Read the English version

Hier, je me demandais comment créer un block de thème de formulaire personnalisé avec Twig. Mon problème était d’afficher deux boutons radio avec un rendu particulier.

Je n’ai pas trouvé la solution dans la documentation Symfony2 mais la méthode est très simple. Laissez-moi vous l’expliquer :

Le block de thème personnalisé

Je voulais utiliser le block suivant. Comme vous le voyez, en plus des éléments p, div et de leurs classes spécifiques, la grosse différence avec la méthode native form_row de Twig est que les labels des radios ne sont pas dans une balise label (mais il y a une balise label pour le champ de formulaire parent).
Continue reading

Share Button

Share Button

Read the English version

Nous travaillons actuellement sur un gros projet internationnalisé, et en conséquence, nous avons énormément de traductions dans notre application. Ces traductions sont réparties dans plusieurs bundles (7 pour l’instant) et sont utilisées dans toute l’application. Au début du développement, nous n’avions pas d’organisation spécifique pour les traductions et nous les mettions dans n’importe quel bundle (celui sur lequel nous étions en train de travailler).

Mais, un beau jour ensoleillé, j’ai ouvert un fichier de traductions et j’ai réalisé à quel point c’était devenu horrible.
Nous avons donc commencé à réfléchir à une manière simple et efficace de garder ces fichiers de traductions bien organisés. Ah, on utilise yaml, donc si vous utilisez xliff, ou n’importe quoi d’autre, ce billet ne vous aidera peut être pas. Mais peut être que si.
Continue reading

Share Button

Share Button

Read the English version

Dans ce post, nous allons expliquer comment créer un super type de champ personnalisé qui utilise le DatePicker de jQuery afin de gérer les saisies de date. Ensuite, nous allons l’étendre afin de créer un type de champ DateTime. Et le meilleur? C’est que ce type de champ sera localisé en fonction de la locale de l’utilisateur.
C’est parti!

Continue reading

Share Button

Share Button

Read the English version

Nous allons créer une barre de boutons sociaux pour partager une page sur Facebook, Twitter et Google+ avec Symfony2 et Twig.

Le résultat escompté est quelque chose qui ressemble à :

Continue reading

Share Button