我有一个基于 Symfony 1.4 构建的项目,它有多个环境——每个开发人员都在他们的本地机器上安装了自己的副本,因此有自己的环境。
我可以在 index.php 中动态设置环境,但是如何为 CLI 任务执行此操作?
我当然可以在所有任务上使用 --env=myenvironment,但我希望它能够使用与 index.php 中相同的逻辑
我有一个基于 Symfony 1.4 构建的项目,它有多个环境——每个开发人员都在他们的本地机器上安装了自己的副本,因此有自己的环境。
我可以在 index.php 中动态设置环境,但是如何为 CLI 任务执行此操作?
我当然可以在所有任务上使用 --env=myenvironment,但我希望它能够使用与 index.php 中相同的逻辑
sfContext::getInstance()->getConfiguration()->getEnvironment()
我看到这个问题有很多观点,所以我发布我想出的解决方案仅供参考。
我最终想出了一个 Web 和 CLI 访问的解决方案,因此每次安装都可以确定使用哪个环境,而不会影响 Subversion 中的任何内容:
http://www.4pmp.com/2010/10/programmatically-set-environment-for-symfony-project/
你可以在你的任务中做类似的事情:
class MyTask extends sfBaseTask
{
protected function configure()
{
// Env config file
$file = sfConfig::get("sf_config_dir") . DIRECTORY_SEPARATOR . "environment.cfg";
$env = (file_exists($file) ? file_get_contents($file) : "prod");
$this->addOptions(array(
new sfCommandOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', $env),
}
}
以上应该有效;如果 environment.cfg 文件不存在,则默认为“prod”环境。这也假设您在文件中只有环境(例如“prod”、“dev”、“slappythefish”等)。