代码之家  ›  专栏  ›  技术社区  ›  Mailo Světel

symfony-任务-使用选项

  •  1
  • Mailo Světel  · 技术社区  · 15 年前

    有没有写过(教程或文档)如何在自定义symfony任务中正确使用选项?

    class mloMaintainceTask extends sfBaseTask
    {
      protected function configure()
      {
        // ...
        $this->setOptions(array(
          new sfCommandOption('mloOption');
        ));
      }
    
      private function method3()
      {
        return $this->getOption('mloOption');
      }
    }
    

    是否有类似于示例方法3中的getOption方法的内容?

    2 回复  |  直到 15 年前
        1
  •  4
  •   nortron    15 年前

    以防万一你还没看到: http://www.symfony-project.org/cookbook/1_1/en/tasks

    这提供了自定义任务创建的良好概述,包括选项和参数。事实上,几天前我只是坐下来写一些任务,所以我会尽量复习到目前为止我学到的东西。下面是我创建的一个任务的示例,该任务从Subversion更新一个项目,以便快速重建:

    $this->addOptions(array(
        new sfCommandOption('username', null, sfCommandOption::PARAMETER_REQUIRED, 'Subversion username'),
        ...
    ));
    

    第一个参数是选项的名称,将通过以下方式在命令执行中发挥作用:

    /symfony my:任务-- 用户名 =“FO”

    第二个参数由类定义(symfony_lib_dir%/command/sfcommandoption.class.php)定义为快捷方式,但我还没有使用它,您的猜测和我的一样好。

    第三个参数指定参数是否更多,然后只调用它。您的选择如下:

    PARAMETER_NONE
      ex: --username
    PARAMETER_OPTIONAL
      ex: --username[=...]
    PARAMETER_REQUIRED
      ex: --username=...
    

    第四个参数是帮助输出参数的描述。

    有一个可选的第五个参数可以为默认值指定,只要您不是参数“无”(如果您是,它将在执行时引发异常)。

    一旦设置了选项,就可以从传递给任务执行函数的第二个参数访问它们,它们将作为关联数组来访问。继续我的示例,我将得到以下内容:

    protected function execute($arguments = array(), $options = array()) {
        $task = 'svn up';
        if($options['username']) {
            $task .= ' --username="' . $options['username'] . '"';
        }
        ....
    }
    

    一直以来对我最有帮助的是代码示例,由于symfony与大量现有任务捆绑在一起,我强烈建议查看它们(symfony_lib_dir%/task/*)以获取灵感和指导。我真的得到了project/sfprojectdeploy.class.php的帮助,特别是它使用了各种各样的sftask功能,对于通过我的自定义任务找到方法至关重要。

    希望有帮助。

        2
  •  1
  •   Andrei Dziahel vjache    15 年前

    您应该将实际选项的值显式传递给其他方法。

    private function method3($optionvalue)
    {
      return $optionvalue;
    }
    protected function execute($arguments = array(), $options = array())
    {
      /*blablabla*/
      echo $this->method3($options['mlooption']);
      /*blablabla*/
    }