2009-09-03 4 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'), 
    ... 
)); 

最初のパラメータがオプションの名前であるとなることで、コマンドの実行に再生されます:

ここで私はそれが迅速な再構築のためのSubversionからプロジェクトを更新し作成したタスクの例を示します。 /私のsymfonyの:タスク - =「foo」という

二番目のパラメータは、クラス定義(%symfony_lib_dirの%/コマンド/ sfCommandOption.class.php)でショートカットとして定義されていますが、私がプレイしていませんそれはまだ、あなたの推測は私のものと同じくらい良いです。

3番目のパラメータは、引数が多ければ呼び出しているかどうかを指定します。オプションは次のとおりです。

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

第4引数は、ヘルプ出力の引数の説明です。

PARAMETER_NONEでない限り、デフォルト値として指定できるオプションの5番目のパラメータがあります(実行していると例外が発生します)。

オプションが設定されると、タスクの実行関数に渡される2番目のパラメータからそれらのオプションにアクセスできます。これらのパラメータには、連想配列として渡されます。

いつも私のために最も役立っている何
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

+0

機能ではありません。その代わりに、あなたの実行関数の第2引数で連想配列を同じ方法で使うことができます($ options ['option_name'])。利用可能なオプションとパラメータのセットは、configureメソッドで設定されたものに限定されているので、実際には関数は必要ありません。 – nortron

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

関連する問題