2009-09-03 6 views
1

Est-ce que n'importe où écrit (tutoriel ou documentation) comment fonctionne correctement avec les options de la tâche symfony personnalisée?Symfony - Tâche - Travailler avec les options

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

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

Y at-il quelque chose comme la méthode getOption de la MÉTHODE3

Répondre

4

Juste au cas où vous ne l'avez pas déjà vu: http://www.symfony-project.org/cookbook/1_1/en/tasks

Cela donne un bon aperçu de la création de tâches personnalisée, y compris les options et les arguments. En fait, je me suis assis pour écrire quelques tâches il y a quelques jours, alors je vais essayer de revenir sur ce que j'ai appris jusqu'à présent. Voici un exemple d'une tâche que j'ai créé qui met à jour un projet de subversion pour une rapide reconstruction:

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

Le premier paramètre est le nom de l'option et jouer dans l'exécution de la commande en devenant:

./symfony ma: tâche - nom d'utilisateur = « toto »

le second paramètre est défini comme un raccourci par la définition de classe (% symfony_lib_dir%/commande/sfCommandOption.class.php) mais je n'ai pas joué avec encore, votre estimation est aussi bonne que la mienne.

Le troisième paramètre spécifie s'il y a plus à l'argument que son appel. Vos options sont les suivantes:

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

Le quatrième paramètre est la description de l'argument pour la sortie d'aide.

Il existe un cinquième paramètre facultatif qui peut être spécifié pour une valeur par défaut tant que vous n'êtes pas PARAMETER_NONE (il lancera une exception à l'exécution si vous l'êtes). Une fois que vos options sont configurées, vous pouvez y accéder à partir du deuxième paramètre passé à la fonction d'exécution de votre tâche, elles apparaîtront comme un tableau associatif. En continuant mon exemple, je voudrais avoir:

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

Ce qui a toujours été très utile pour moi est des exemples de code et depuis Symfony est livré avec une grande collection de tâches existantes, je recommande fortement de les revoir (% symfony_lib_dir%/tâche/*) pour l'inspiration et l'orientation. J'ai été particulièrement aidé par project/sfProjectDeploy.class.php, il utilise une grande variété de fonctionnalités sfTask et était crucial pour trouver mon chemin à travers mes tâches personnalisées.

Espérons que ça aide.

+0

Lorsque je crée une instance d'un objet formulaire, je peux passer des options au constructeur et y accéder dans la classe form par $ this-> getOption ('nameOfPassedVariable'). Les tâches n'ont pas quelque chose de similaire? – Mailo

+0

Pas en tant que fonction, non. Au lieu de cela, vous pouvez simplement utiliser le tableau associatif dans votre second paramètre de la même manière ($ options ['nom_option']). Il n'y a vraiment pas besoin d'une fonction car l'ensemble d'options et de paramètres disponibles pour vous est limité à ce qui a été configuré dans votre méthode configure. – nortron

1

de l'exemple que vous devez passer les valeurs options réelles à d'autres méthodes explicitement.

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

J'ai rencontré $ options, mais il n'y a jamais les options que j'ai données à la tâche – Mailo