Я использую http-хост в веб-контроллере, чтобы обнаружить среду и передать ее экземпляру конфигурации проекта, как показано здесь:
<?php
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
$env = ProjectConfiguration::getEnvironment();
if (!in_array($env, array('dev'))) throw new Exception('Not Allowed');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', $env, true);
sfContext::createInstance($configuration)->dispatch();
Это из frontend_dev.php - поэтому он также гарантирует, что вы не можете получить доступ к контроллеру dev где-либо, кроме dev.
Мой класс конфигурации проекта содержит указанный метод, который выполняет работу:
public function getEnvironment() {
if ($_SERVER ['HTTP_HOST'] == 'dev.example.com') {
return 'dev';
} else {
return 'prod';
}
}
Как вы правильно сказали, есть и задачи командной строки, которые нужно учитывать - но почти все задачи Symfony будут принимать аргументы --env = xxx. Я использую их. В любом случае все они по умолчанию используют dev, и именно здесь я делаю большую часть своей работы, так что это не так сложно, как кажется.
Я бы тогда использовал if (sfConfig::get('sf_environment') == 'dev')
в вашем операторе if, а не HTTP_HOST напрямую, который будет работать как из строки cmd, так и из сети.