Liens inter-applications avec Symfony 1.1

24 juillet 2008

Un important travail réalisé pour la sortie de Symfony 1.1 a été le retrait du pattern singleton du framework. On peut maintenant instancier plusieurs objet sfContext par exemple. Cela permet notamment de faire des liens inter-application a peu près proprement. Voici l’avancée de mon travail sur la question :

fichier lib/helper/crossAppLinkHelper.php

<?php
/**
 * @author Olivier Mansour
 */
 
/**
 * return an url for a given symfony application and an internal url
 * work with symfony 1.1
 * freely inspired from sfWebControlleur code
 *
 * @author Olivier Mansour
 * 
 * @param string $appname
 * @param string $url
 * @param boolean $absolute
 * @param string $env
 * @param boolean $debug
 * @return string
 */
function cross_app_url_for($appname, $url, $absolute = 'false', $env = null, $debug = 'false')
{
 
  if (sfConfig::get('sf_no_script_name'))
  {
  // wont work
  throw new sfException(__FUNCTION__.' : the cross app link helper will not work with sf_no_script_name to true');
  }
 
  // get the environment
  if (is_null($env))
  {
    $env = sfContext::getInstance()->getConfiguration()->getEnvironment();
  }
 
  // context creation
  if (!sfContext::hasInstance($appname))
  {
    $c = ProjectConfiguration::getApplicationConfiguration($appname, $env, $debug);
    sfContext::createInstance($c, $appname);
  }
 
  list($route_name, $parameters) = sfContext::getInstance($appname)->getController()->convertUrlStringToParameters($url);
  $request = sfContext::getInstance($appname)->getRequest();
 
  $url_root = $request->getRelativeUrlRoot();
  if ($absolute)
  {
    $url_root = 'http'.($request->isSecure() ? 's' : '').'://'.$request->getHost().$url_root;
  }
 
  //scriptname
  $scriptname = '';
  if (($env != 'prod') and ($env))
  {
  	$env_suf = '_'.$env;
  } 
  else
  {
   $env_suf = '';
  }
  if (!file_exists(sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.$appname.$env_suf.'.php'))
  {
  	//test with index ?
  	if (file_exists(sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.'index'.$env_suf.'.php'))
  	  $scriptname = 'index'.$env_suf.'.php';
  	else
      throw new sfException(__FUNCTION__.' : can\'t find a script name for appname : '.$appname.' and env : '.$env); 	 
  }
  else
  {
  	$scriptname = $appname.$env_suf.'.php';
  }
 
 
  $fragment = '';
  // strip fragment
  if (false !== ($pos = strpos($url, '#')))
  {
    $fragment = substr($url, $pos + 1);
    $url = substr($url, 0, $pos);
  }
 
  // generate url
  list($route_name, $parameters) = sfContext::getInstance($appname)->getController()->convertUrlStringToParameters($url);
 
  if (sfConfig::get('sf_url_format') == 'PATH')
  {
    // use PATH format
    $divider = '/';
    $equals  = '/';
    $querydiv = '/';
  }
  else
  {
    // use GET format
    $divider = ini_get('arg_separator.output');
    $equals  = '=';
    $querydiv = '?';
  }
  $web_url = $url_root.$querydiv.$scriptname.sfContext::getInstance($appname)->getRouting()->generate($route_name, $parameters, $querydiv, $divider, $equals);
 
  if ($fragment)
  {
    $web_url .= '#'.$fragment;
  }
 
  return $web_url;
}

Pour l’utiliser (par exemple, depuis une application nommée back) :

<?php echo cross_app_url_for('front' , '/module/action?id=5&tmp=ok#raoul'); ?>

Je ne l’ai pas beaucoup testé et a vrai dire je ne sais pas si on peut faire plus efficace. Le point particulier qui m’a poussé à écrire autant de code est que, si il est facile d’extraire les routes pour un contexte donnée, la méthode genUrl de sfWebController utilise un objet sfRequest pour obtenir l’url du contrôleur (back_dev.php par exemple) ce qui est bloquant dans mon cas.

Si vous avez des retours n’hésitez pas.

Vous pouvez télécharger le code cité plus haut : crossAppLinkHelper.php.zip


Téléchargez votre vin en direct des domaines !

24 juillet 2008

C’est beau la technologie !

usbwine.com


Blogmarks pour le 19/07/2008

19 juillet 2008

Royal Pingdom » Forget about hacking - your servers might get stolen

When it comes to security, there is often a focus on the software side, thwarting hackers and other virtual threats such as viruses and worms. When it comes to uptime and availability, focus often rests on redundant power, clustering, and other similar strategies. We often forget about something that can put a stop to any operation: good, old-fashioned, real-life robbery.

(categories: )

Le spam représente 81,6% des emails au niveau monde par Neteco.com

Malgré bien des tentatives pour essayer de l’éradiquer et de le minimiser, le spam ou courrier électronique non sollicité reste plus que jamais d’actualité. Dans une récente étude publiée par MessageLabs, 81,5% des emails reçus au travers des fournisseurs d’accès seraient du spam.

(categories: )

PHPTV - Dur Comme Faire

La première télévision sur le web entièrement consacrée à PHP vient d’être officiellement lancée. PHPTV est une initiative de l’AFUP produite par la société OpenStates. Cette web TV publiera une émission chaque mois.

(categories: )

Zend, la PHP compagnie, lève 7 millions de dollars par Neteco.com

Zend, « The PHP Company », lève 7 millions de dollars auprès de TriplePoint Capital. Cette nouvelle levée de fonds doit lui permettre de monter en puissance sur un marché en croissance.

Après tout, ce n’est qu’un petit million de moins que seesmic :-p

(categories: )

Comment localiser sa copine grâce à Orange !

Orange vient tout juste de mettre en ligne son API de localisation de téléphone mobile sur son portail Orange Partner :

http://www.orangepartner.com/

Cette API REST fonctionne pour tous les clients Orange France quel que soit leur modèle de téléphone (GPS ou non) à condition bien sûr qu’ils aient accepté préalablement le SMS de demande de localisation envoyée par le service.

(categories: )

Integrate your PHP application with Google Calendar

Google Calendar allows Web application developers to access user-generated content and event information through its REST-based Developer API. PHP’s SimpleXML extension and Zend’s GData Library are ideal for processing the XML feeds generated by this API and using them to build customized PHP applications. This article introduces the Google Calendar Data API, demonstrates how you can use it to browse user-generated calendars; add and update calendar events; and perform keyword searches.

(categories: )

Google devrait numériser des documents de la bibliothèque de Lyon

Le groupe internet Google devrait être choisi demain par la municipalité de Lyon pour numériser 500.000 documents du fonds ancien de la bibliothèque municipale.
Cela ferait de Lyon la première ville française à procéder à la numérisation de ses ouvrages patrimoniaux, antérieurs au XXe siècle.

(categories: )

blogmarks.net


Sauvegarde de ce site avec Automator

17 juillet 2008

Automator est un logiciel fourni par apple permettant au premier utilisateur venu de créer visuellement des applications enchainant des actions simples. Automator est à mon avis assez méconnu et mériterait plus de publicités.

Mon site hébergé par Gandi avait besoin d’un petit système de sauvegarde. En bon informaticien j’ai cherché le moyen le plus rapide et simple pour le réaliser.

Lire la suite »


WordPress 2.6 intègre Google Gears

16 juillet 2008

Dans le but d’accélérer le back office, WordPress 2.6 intègre maintenant Google Gears !

Pour l’instant le bouton turbo ne sert qu’a mettre en local certaines CSS, javascripts et autres données générales de votre blog, mais on peut espérer une utilisation plus intensive dans le futur comme la contribution hors-ligne.

activation de Google Gears

Google Gears activé

Sur mon hébergement, le back office est sensiblement plus rapide.

Chapeau WordPress !


Une bande de petits braillards

16 juillet 2008

Pas possible de prendre son petit dej tranquille !!!!


Les cousines se bidonnent !

11 juillet 2008

Ce qui est sympa à trois ans, c’est qu’un rien t’amuse !


Blogmarks pour le 10/07/2008

10 juillet 2008

Web Form Design Patterns: Sign-Up Forms, Part 2 | How-To | Smashing Magazine

Last week we have presented first findings of our web forms survey. The main objective of the survey was to provide designers and developers with some intuition of how effective web forms are designed; we also presented some guidelines of how an effective and user-friendly web form can be achieved.

(categories: )

ratproxy - Google Code

A semi-automated, largely passive web application security audit tool, optimized for an accurate and sensitive detection, and automatic annotation, of potential problems and security-relevant design patterns based on the observation of existing, user-initiated traffic in complex web 2.0 environments.

(categories: )

Recherchez vos documents Google Documents sur votre Mac avec Spotlight

Vous possédez un Mac et vous utilisez Google Document. Voici une application qui vous permettra de rechercher des documents et signets présents sur votre compte Google en utilisant Spotlight. Cette utilitaire se nomme Precipitate, il a été développé par Stuart Morgan de chez Google.

(categories: )

Go!Explore

Go!Explore est hyper facile à utiliser, et que vous soyez piéton ou automobiliste, il fait de votre PSP un système GPS idéal.

(categories: )

blogmarks.net


Lier vos médias depuis vos vues Symfony

9 juillet 2008

(encore un post un peu pense bête pour moi)

Les helpers sont pratiques pour afficher des images ou créer des liens htmls. Parfois, on désire lier des documents que l’on a uploadé dans un répertoire spécifique ou autre bizarrerie. La classe sfWebRequest de Symfony fourni une méthode bien pratique pour faire ça. Par exemple pour accéder au fichier raoul.pdf dans le répertoire web/uploads/pdf :

echo '<a href="'.$sf_request->getRelativeUrlRoot().'/'.
  sfConfig::get('sf_upload_dir_name').'/pdf/raoul.pdf'
  .'raoul.pdf</a>';

Cet objet est automatiquement accessible depuis vos vues via la variable $sf_request.


PHPTeam, une vieille application de retour sous Symfony

9 juillet 2008

Je découvre la nouvelle version de PHPTeam. Pour l’instant, le fork de Symfonians est encore un peu brutal, comme, par exemple, le bloc “a propos” mais il y a déjà quelques articles, un super logo et deux offres d’emploi !

Une bonne initiative si elle est suivie d’inscriptions et de contenus.

Bon courage aux développeurs de ce site.