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.