2010-06-11 25 views
19

Je cherchais un moyen facile d'obtenir le ServerName de la machine sur laquelle Symfony s'exécute dans Symfony (de sorte que mon application s'adapte quand elle est utilisée sur un hôte avec un nom de serveur différent), mais je n'ai pas pu trouver. J'ai créé une variable dans app.yml et je la récupère, mais je me demande toujours s'il n'y a pas de moyen plus simple de le faire. Comment faites-vous cela? J'utilise Symfony 1.2 et 1.4 sur différents projets.Existe-t-il un moyen facile d'obtenir le ServerName dans Symfony?

+2

Vous ne pouvez pas utiliser gethostname()? http://php.net/manual/fr/function.gethostname.php – mamoo

+0

Désolé, je ne veux pas le nom d'hôte en fait, mais le ServerName (j'ai édité mon post) – greg0ire

Répondre

39

Je pense avoir trouvé quelque chose:

$this->getRequest()->getHost() 

Cela semble fonctionner ... il ne fonctionnera que là est une demande bien sûr, donc ce n'est pas universel.

+1

Un collègue vient de me dire que nous ne devrions pas compter sur ceci, parce qu'il y a beaucoup de risques. Il pense que la mise en fichier YML est la meilleure solution ... – greg0ire

+1

pourriez-vous élaborer sur les risques s'il vous plaît? :-) – Flukey

+2

Il y a au moins deux situations où vous ne voulez pas compter sur un tel système: - lorsque vous n'utilisez pas apache (lors de l'envoi de mails via un cronjob par exemple) - quand vous avez plusieurs serveurs mais vous voulez pour promouvoir votre site acheter en utilisant un seul d'entre eux. – greg0ire

2

Pas très agréable, mais je l'utilise $_SERVER["SERVER_NAME"] dans mon dossier de contrôleur frontal, et l'utiliser pour déterminer l'environnement j'activer:

$env = "prod"; 
if (preg_match("/qahost\.tld$/", $_SERVER["SERVER_NAME"])) 
{ 
    $env = "qa"; 
} 
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $env, false); 
sfContext::createInstance($configuration)->dispatch(); 

Je serais intéressé de voir l'approche appropriée : -)