Archives du mot-clé symfony

Astuce symfony : générer du cache depuis une task

Dans une tache symfony, il est tout à fait possible de créer un contexte comme si l’on venait d’un appel http.

$configuration = ProjectConfiguration::getApplicationConfiguration($options['application'], $options['env'], false);
$sf_context = sfContext::createInstance($configuration, 'raoul');
sfContext::switchTo('raoul');

Ceci fait, on pourrait imaginer appeler la fonction get_component présente dans PartialHelper.php histoire de générer le cache pour certains composants.

// charge le helper
$configuration->loadHelpers('Partial');
get_component($moduleName, $componentName, $vars); // si le composant utilise du cache, le fichier de cache sera crée

Le probleme est que tous les appels à link_to ou image_tag vont générer des liens invalides. (avec des symfony/symfony dans les urls)

La solution que j’ai trouvée en regardant du coté de sfBrowserBase.class.php consiste à setter le tableau $_SERVER pour simuler complètement la navigation web. Il faut donc insérer les lignes suivantes avant la création du contexte :

unset($_SERVER['argv']);
unset($_SERVER['argc']);
$_SERVER['HTTP_HOST']       = $arguments['host'];
$_SERVER['SCRIPT_NAME']     = $arguments['script_name'];
$_SERVER['SERVER_NAME']     = $_SERVER['HTTP_HOST'];
$_SERVER['SERVER_PORT']     = 80;
$_SERVER['REQUEST_METHOD']  = 'GET';

Bien sur, il faut que votre task prenne host (par exemple ‘localhost’ pour vos test) et script_name (par exemple ‘/monalias/frontend.php’) en arguments.

Cela semble fonctionner dans mon cas. N’hésitez pas si vous avez des retours ou des remarques.

Mise à jour de la liste des contribution à symfony de PMSIpilot

La liste des modestes contributions à symfony a été mise à jour sur pmsipilot.org. On a trouvé deux trois petites choses 😉 et proposé pas mal de patchs.

http://www.pmsipilot.org/2010/03/25/contributions-a-symfony/

Nous utilisons maintenant symfony 1.4 qui propulsera la prochaine version majeure de nos outils de pilotage.

Migration d’un gros projet symfony de la version 1.2 à 1.4

Lors du symfony live 2010 (non, je ne vous ferais pas un compte rendu de symfony live 2010, il y en a de très bien déjà partout sur l’internet) beaucoup de personnes ont interpellées la core team au sujet des problèmes de compatibilité descendante avec symfony.

Récemment, dans ma société, j’ai migré un projet de symfony 1.2 à 1.4. Pas un petit, 220 000 lignes de code (hors symfony, code généré et plugins). A vrai dire, vu comme ça, je me disais que ça marcherait jamais.

J’ai utilisé les documents suivants :

J’ai commencé par mettre à jour lib/vendor/symfony en 1.3 et fait tourner la tache ./symfony project:upgrade1.3.  La plupart des YLM ont été modifiés correctement, tous les héritages des formulaires, la gestion de la disparition du common filter … tout ça a été fait automatiquement pour moi ! project:validate m’a ensuite indiqué la liste des méthodes et fonctions dépréciées. Un peu de surcharge de méthodes, de récupération de vieux helpers, et voila. En quelques heures le projet était d’équerre. Ceci fait, j’ai ensuite migré vers la 1.4.

Le plus pénible à gérer fut la fin de la gestion des tableaux dans les méthodes de sfParameterHolder. project:validate a bien indiqué les classes des contrôleurs à changer mais n’a pas pu chercher dans les autres classes les (maintenant) mauvaises utilisations des tableaux. Pour ça, les tests ont bien aidé, et le reste de l’équipe à résolu quelques occurrence de ce problème les jours suivant.

Pour ma part, des migrations comme ça j’en veux bien tout le temps !

Je travaille avec symfony depuis la version 0.6.3, et je ne l’ai jamais trouvé aussi facile à utiliser.

Au boulot, moi, j’utilise Facebook !

Mais c’est pour améliorer les performances de nos applications grâce à un plugin développé par un de mes brillants collègues : elXHProfPlugin.

Mon équipe l’utilise sans douleurs depuis plusieurs semaines et avec de nombreux gains à la clef. C’est la démocratisation du profiling qui, jusqu’alors, était plus réservé aux CP techniques tant sa mise en place, avec xdebug, était pénible.

Plus d’informations sur le .org de PMSipilot.

technique @PMSIpilot

Le site de l’équipe technique de PMSIpilot est en ligne sur pmsipilot.org. La bise à celui qui nous trouve un joli thème !

Avec des trucs supers intéressants comme :

(infamie, il n’y a pas de favicon)

PMSIpilot lance DPU, une solution complète et gratuite de gestion des services d’urgences

PMSIpilot (je travaille actuellement dans cette société), lance un nouveau produit destiné à équiper les services d’urgences des hôpitaux publics et privés.

Je vous invite à découvrir le site dédié à cette solution : http://dpu.pmsipilot.com.

Ce dernier comporte quelques vidéos qui vous permettront de découvrir l’application. Techniquement, la technologie client léger LAMP est utilisée et le framework de développement est Symfony (les treeviews sont fait avec extjs).

Je suis particulièrement content de cette réalisation. Parce qu’elle est de très bonne facture, tant sur le plan technique que fonctionnelle (je salue par ailleurs l’ensemble des développeurs de ce projet !) mais que son mode de commercialisation, si il est assez fréquent en informatique, est assez innovant, selon moi, dans le milieu de la santé.

Faire des liens entre applications dans un projet symfony, revue des trois méthodes proposées

Avec Symfony 1.0, faire un lien d’une application vers une autre application représentait un vrai challenge. La solution la moins horrible consistait à parser le fichier routing.yml et faire 10 000 bidouilles que je vous cacherais ici. Dans Symfony 1.0 le contexte était géré via le pattern singleton dans une variable statique ; impossible d’en instancier un autre. De plus, le système de route était trop couplé au framework pour l’utiliser plus indépendamment.

Ces deux évolutions (instanciation de plusieurs contextes possible et découplage du système de routing) en symfony 1.2 on permis enfin de gérer des liens inter application proprement

A ma connaissance il y a trois façons aujourd’hui de faire des liens entre différentes applications dans un même projet Symfony. Dans ces trois cas, on sent que les développeurs ont cherché à répondre à  ce même besoin selon des contraintes qui leurs étaient propres.

Lire la suite

Obtenir la liste des autorisations de votre projet Symfony : le plugin omCredentialsMap est disponible

Suite à la publication d’une tache permettant de lister les autorisations dans un projet symfony, j’ai packagé l’ensemble dans un plugin et libéré ça dans le repository de Symfony.

C’est disponible ici : http://www.symfony-project.org/plugins/omCredentialsMapPlugin

Exemple de sortie du plugin :

 pmsipilot  admin           anonymiseur : admin_mco_donnees
 pmsipilot  admin                atypie : acces_dossiers_medicaux AND acces_mco
 pmsipilot  admin    baseMessageAccueil : acces_mco
 pmsipilot  admin             coherence : admin_mco_donnees
 pmsipilot  admin                 datim : acces_dossiers_medicaux AND acces_mco
 pmsipilot  admin             detailRss : acces_dossiers_medicaux AND acces_mco
   portail  accueil               index : OFF
   portail  accueil            saveData : OFF
   portail  default  checkcalculencours : OFF

Les colonnes représentent respectivement : l’application, le module, l’action et les credentials associés. Merci de consulter le REAME pour plus d’infos. Tout retour est le bienvenu.