2009-09-03 41 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