На всякий случай, если вы еще не видели это: http://www.symfony-project.org/cookbook/1_1/en/tasks
Это дает хороший обзор создания пользовательских задач, включая параметры и аргументы. На самом деле я только что сел написать пару задач несколько дней назад, поэтому я попытаюсь пройтись по тому, что я уже понял. Вот пример созданной мной задачи, которая обновляет проект из subversion для быстрой перестройки:
$this->addOptions(array(
new sfCommandOption('username', null, sfCommandOption::PARAMETER_REQUIRED, 'Subversion username'),
...
));
Первый параметр — это имя параметра, и он будет играть роль в выполнении команды:
./symfony my:task --имя пользователя="foo"
Второй параметр определен как ярлык в определении класса (%symfony_lib_dir%/command/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%/task/*) для вдохновения и руководства. Мне очень помог проект /sfProjectDeploy.class.php, в частности, он использует широкий спектр функций sfTask и был крайне важен для поиска пути в моих пользовательских задачах.
Надеюсь, это поможет.
person
nortron
schedule
05.09.2009