2009-09-03 53 views
1

随处可写(教程或文档)如何正确使用自定义symfony任务中的选项?Symfony - 任务 - 使用选项

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

    private function method3() 
    { 
    return $this->getOption('mloOption'); 
    } 
} 

有什么样从示例的方法3

回答

4

万一你还没有见过这个:http://www.symfony-project.org/cookbook/1_1/en/tasks

这就提供了自定义任务创造一个很好的概述,包括选项和参数。我其实刚刚坐下来几天前写几个任务,所以我会试着去看看到目前为止我所选的内容。下面是我创建了一个任务,以颠覆更新项目的快速重建一个例子:

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

的第一个参数是选项的名称,将被越来越发挥到命令执行:

。/symfony的我的:任务 - 用户名=“foo”的

第二个参数被定义为通过类定义的快捷方式(%symfony_lib_dir%/命令/ sfCommandOption.class.php),但我还没有发挥但是,你的猜测和我的一样好。

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

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

第四个参数是帮助输出参数的说明。

有一个可选的第五个参数,只要你不是PARAMETER_NONE(它会在执行时抛出异常)。

一旦你设置了选项,你可以通过传递给你任务执行函数的第二个参数来访问它们,它们将作为关联数组来完成。继续我的例子中,我将有以下几点:

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

什么一直是最有帮助的,我是代码示例和自Symfony的是与现有任务大集合捆绑,我强烈建议您查看它们(%symfony_lib_dir%/任务/ *)获取灵感和指导。我真的得到了project/sfProjectDeploy.class.php的帮助,它使用了各种各样的sfTask功能,并且对于通过我的自定义任务找到自己的方式至关重要。

希望有所帮助。

+0

当我创建表单对象的实例时,我可以将选项传递给构造函数,然后通过$ this-> getOption在表单类中进行访问( 'nameOfPassedVariable')。任务没有类似的东西? – Mailo 2009-09-10 20:50:31

+0

不作为功能,不。相反,你可以在你的执行函数第二个参数中以相同的方式使用关联数组($ options ['option_name'])。实际上不需要函数,因为可用的选项和参数集只限于配置方法中设置的内容。 – nortron 2009-09-12 22:54:46

1

的getOption方法你应该明确地传递实物期权值与其它方法。

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

我遇到了$ options,但是从来没有我给任务的选项 – Mailo 2009-09-04 21:11:11