2 votes

Symfony - task - travailler avec des options

Y a-t-il quelque part un tutoriel ou une documentation qui explique comment travailler correctement avec les options dans les tâches personnalisées de Symfony ?

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

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

Existe-t-il quelque chose comme la méthode getOption de la méthode 3 de l'exemple ?

5voto

nortron Points 3267

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

Cela donne une bonne vue d'ensemble de la création de tâches personnalisées, 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 passer en revue ce que j'ai appris jusqu'à présent. Voici un exemple d'une tâche que j'ai créée et qui met à jour un projet depuis subversion pour une reconstruction rapide :

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

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

./symfony my:task -- Nom d'utilisateur \="foo"

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

Le troisième paramètre spécifie si l'argument contient plus que son simple appel. Les 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 l'édition de l'aide.

Un cinquième paramètre facultatif peut être spécifié pour une valeur par défaut tant que vous n'êtes pas PARAMETER_NONE (une exception sera levée à l'exécution si c'est le cas).

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, sous la forme d'un tableau associatif. En continuant mon exemple, j'aurais ce qui suit :

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

Ce qui m'a toujours le plus aidé, ce sont les exemples de code et comme Symfony est fourni avec une grande collection de tâches existantes, je recommande fortement de les consulter (%symfony_lib_dir%/task/*) pour trouver de l'inspiration et des conseils. J'ai été très aidé par project/sfProjectDeploy.class.php en particulier, il utilise une grande variété de fonctionnalités de sfTask et a été crucial pour trouver mon chemin à travers mes tâches personnalisées.

J'espère que cela vous aidera.

1voto

develop7 Points 913

Vous devez transmettre explicitement les valeurs des options réelles à d'autres méthodes.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X