NairuS

Aller au contenu | Aller au menu | Aller à la recherche

dimanche, février 20 2011

Surcharger les getter/setter magique de Doctrine

Hello,

Pour continuer la série de billets sur mon plugin, voici une dernière astuce que j'ai mis en place.

J'avais besoin que mon modèle ait un comportement spécial sur un champ en particulier.
En base il est de type "LONGTEXT" pour me permettre de stocker une chaine de caractère encodée en JSon.
Le "getter" doit me renvoyer le tableau indéxé avec la fonction "json_decode" et le "setter" doit encodé un tableau indéxé avec la fonction "json_encode".

L'objectif étant de pouvoir créer et configurer un formulaire avec des champs dynamiques.

Lire la suite...

dimanche, février 13 2011

Créer des routes dynamiques dans un plugin

Hello,

Dans le billet précédent j'ai fait référence à un plugin que j'ai développé.
Le sujet d'aujourd'hui porte sur la configuration dynamique des routes de ce dernier à l'instar de sfGuardPlugin.

Pour qu'un plugin avec des modules soit le plus modulaire et flexible possible, il faut pouvoir configurer les modules à activer et les routes à créer dynamiquement selon l'application souhaitée.

Lire la suite...

lundi, janvier 31 2011

Configurer le chargement d'une lib js dans un plugin symfony

Hello,

Récemment j'ai été confronté à plusieurs problématiques quant au chargement d'une librarie jQuery au sein d'un plugin.

D'abord il fallait pouvoir charger les librairie javascript du plugin en bas de page pour optimiser le temps de chargement comme le précaunise l'outil YSlow.
Ensuite permettre à l'utilisateur de choisir d'activer ou non le chargement de jQuery selon la configuration de son projet.
Enfin, en cas d'activation de jQuery dans le plugin, charger le fichier depuis un serveur CDN ou en local si le serveur ne répond pas.

Lire la suite...

samedi, octobre 9 2010

Nouveau projet open source

Hello,

Un petit post pour annoncer la création d'un nouveau projet: Packages Dispencer.

Récemment j'ai eu à adapter le projet pearhub pour mon bouleau.
C'est une application qui diffuse des librairies php via son propre canal PEAR grâce au projet pirum de Fabien Potencier.

L'objectif était de capitaliser les plugins symfony métiers développés en interne pour nos clients.
Ce qui permet de bien gérer l'évolution des librairies et d'installer les dernières versions des plugins via une simple ligne de commande une fois le canal enregistré dans l'application:

php symfony plugin:add-channel my-channel
php symfony plugin:install my-channel/myPlugin

Lire la suite...

dimanche, janvier 10 2010

Personnaliser les logs dans Symfony

Il y a quelque temps j'ai été confronté à une problématique de gestion des logs dans mon application Symfony.
Face à des retours d'utilisateurs de plus en plus nombreux, notre client nous a demandé de tracer les problèmes sur les différentes actions du site.

Le problème était que je voulais stocker les logs dans des fichiers séparés selon les actions symfony.
La classe sfAggregateLogger permet de définir plusieurs fichiers de log mais il n'y a avait aucun moyen de diffuser un log uniquement sur un fichier de cette classe.

Lire la suite...

lundi, décembre 21 2009

La class sfYaml

Ce tuto va vous expliquer comment utiliser cette classe qui peut être forte utile.

Dans un de mes derniers projets je devais mettre à jour une correspondance de données entre 2 différentes sources.

Je recevais d'un côté un identifiant envoyé par un script externe en GET et je devais faire une connexion SOAP à une autre BDD pour finir l'action demandée par l'utilisateur.

Etant donné que je n'avais pas de BDD côté symfony, j'ai commencé par ajouter les données envoyées dans le fichier app.yml du front.

Puis j'ai créé une classe utilitaire pour faire la correspondance.

Cette technique présentait 2 défauts:
1- Lors de mise à jour des données envoyées, il faut modifier la class utilitaire et le fichier app.yml
2- Les tests unitaires de la méthode sont impossibles car elle faisait appel au fichier app.yml via la méthode sfConfig::get() et ce fichier n'était pas mis en cache.

J'ai donc trouvé une autre technique bien meilleures à mon gout.

Lire la suite...