Liens inter-applications avec Symfony 1.2

Après une première tentative peu concluante, voici un autre helper permettant de faire des liens entre différentes applications dans Symfony 1.2.

getConfiguration()->getApplication();
  $initial_web_controler = basename(sfContext::getInstance()->getRequest()->getScriptName());
  // get the environment
  if (is_null($env))
  {
    $env = sfContext::getInstance()->getConfiguration()->getEnvironment();
  }

  // context creation
  if (!sfContext::hasInstance($appname))
  {
    $context = sfContext::createInstance(ProjectConfiguration::getApplicationConfiguration($appname, $env, $debug), $appname);
  }
  else
  {
    $context = sfContext::getInstance($appname);
  }
  $web_url = $context->getController()->genUrl($url, $absolute);
  sfContext::switchTo($initial_app); // usefull ?
  unset($context);

  //remove initial web controler
  // genUrl use $this->context->getRequest()->getScriptName();, its a call to $_SERVER
  // so I need this (sort of) hack
  $script_name = $appname;
  if (($env != 'prod') and $env)
  {
    $script_name.='_'.$env;
  }
  $script_name.='.php';
  // check if this file exist
  if (!file_exists(sfConfig::get('sf_web_dir').DIRECTORY_SEPARATOR.$script_name))
    throw new sfException('can t find '.$script_name.' in the web directory');
  $web_url = str_replace ($initial_web_controler, $script_name, $web_url);

  return $web_url;
}

Pour l’utiliser, c’est à peu près comme url_for :



Jusqu’ici ça marche (Symfony 1.2 est en cours de développement, l’API peut encore un peu changer, attention) ! N’hésitez pas à mettre un commentaire si vous avez un retour.

Publicités

8 réflexions au sujet de « Liens inter-applications avec Symfony 1.2 »

  1. NiKo

    En fait je te conseillerai plutôt de ne développer que des plugins, avec des modules de back ou de front que tu n’actives alors que pour tes applications, si tu en as plusieurs. Ça permet notamment une meilleure réutilisation éventuelle de code.

    En effet, tu peux définir des routes au niveau d’un plugin qui seront donc connues de toutes les applications symfony pour lesquels le plugin a été activé. Chouette, non ?

    Répondre
  2. Olivier Mansour

    Cette solution est vraiment bien et ouvre pas mal de possibilités, toutefois, cela force à réfléchir au routing au niveau du projet, je trouvais confortable de laisser chaque équipe libre de ses routes par projet. De plus, c’est difficile de changer un applicatif existant non ?

    Répondre
  3. NiKo

    > je trouvais confortable de laisser chaque équipe libre de ses routes par projet.

    Avec un peu d’organisation et l’emploi de conventions, ça devrait pouvoir se faire… Dans un « futur pas si lointain » il sera vraisemblablement possible de gérer des familles de routes « connectables » à une racine, genre toutes les routes du blog vont derrière http://raoul.org/blog et le forums sous http://raoul.org/forum

    Mais je t’ai rien dit 😉

    > De plus, c’est difficile de changer un applicatif existant non ?

    C’est une bonne scéance de refactoring, certes 😉

    Répondre
  4. Morpheus

    Bonjour,
    je suis nouveau sous symfony!
    Ma question va vous paraître bizarre mais ou dois-je mettre cette fonction afin qu’elle soit prise en compte par toute une application (enfin que le sois possible depuis le template général de mon appli)
    merci.

    Répondre

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s