【问题标题】:Symfony 1.4: Programmatically set environment for CLISymfony 1.4:CLI 的编程设置环境
【发布时间】:2010-03-30 09:35:44
【问题描述】:

我有一个基于 Symfony 1.4 构建的项目,它有多个环境 - 每个开发人员都在他们的本地机器上安装了自己的副本,因此有自己的环境。

我可以在 index.php 中动态设置环境,但是如何为 CLI 任务执行此操作?

我当然可以在所有任务上使用 --env=myenvironment,但我希望它能够使用与 index.php 中相同的逻辑

【问题讨论】:

  • 你如何确定index.php中开发者的环境?主机名?获取参数?你能给我们看一些代码吗?
  • 它在主配置目录中寻找 environment.cfg 文件的存在。此文件的内容将环境指定为字符串。优点是这个文件不提交给SVN,所以每个开发者都可以指定自己的配置而不影响svn中的配置。

标签: php symfony1 environment command-line-interface


【解决方案1】:

sfContext::getInstance()->getConfiguration()->getEnvironment()

【讨论】:

    【解决方案2】:

    我看到这个问题有很多意见,所以我发布我想出的解决方案仅供参考。

    我最终想出了一个同时用于 Web 和 CLI 访问的解决方案,因此每次安装都可以确定使用哪个环境,而不会影响 Subversion 中的任何内容:

    http://www.4pmp.com/2010/10/programmatically-set-environment-for-symfony-project/

    【讨论】:

      【解决方案3】:

      也许你可以在你的任务中做类似的事情:

      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”等)。

      【讨论】:

      • 谢谢,这应该可行 - 但是有没有一种全局方法可以做到这一点,这样当我输入 symfony propel:insert-sql-diff 时,它会自动确定要使用哪个环境?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 1970-01-01
      • 2018-09-23
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多