Команды плагинов⚓︎
Плагины могут интегрироваться с CLI Grav bin/plugin
и расширять функциональные возможности плагина через Терминал, выполняя определённые задачи.
Как объясняется в разделе Grav CLI, вам нужно использовать терминал, чтобы иметь возможность выполнять команды.
При запуске команды bin/plugin
будут перечислены все плагины, обеспечивающие интеграцию CLI.
Первым параметром, передаваемым в bin/plugin
, всегда является имя подключаемого модуля (т. е. error, login и т. д.). Второй вариант - это фактическая команда, которую предоставляет плагин.
В зависимости от реализации плагина могут быть и другие следующие варианты, и вы можете узнать больше о каждом из них, выполнив команду bin/plugin [slug] list
.
Зарезервированные команды и параметры⚓︎
Есть некоторые зарезервированные commands и options, которые всегда доступны из любого плагина. Это также особенно важно помнить, если вы разработчик и хотите реализовать свои собственные задачи, потому что вы не сможете использовать какие-либо зарезервированные команды и параметры.
Команды | |
---|---|
help | Отображает справку по команде |
list | Список команд |
Параметры | |
---|---|
-h , --help | Показать справочное сообщение |
-q , --quiet | Не выводить никаких сообщений |
-v , --version | Показать версию приложения |
--ansi | Принудительный вывод ANSI |
--no-ansi | Отключить вывод ANSI |
-n , --no-interaction | Не задавайте интерактивных вопросов |
-v|vv|vvv , --verbose | Увеличьте уровень детализации сообщений: 1 для обычного вывода, 2 для более подробного вывода и 3 для отладки |
Как использовать интерфейс командной строки для плагинов⚓︎
Команды list и help очень полезны, когда вы ещё не знаете, как использовать интерфейс командной строки определенного плагина.
С помощью list вы можете получить доступ ко всем доступным командам и просмотреть краткое описание того, что каждая из них делает.
Вот пример с плагином login, когда мы запускаем команду bin/plugin login list
.
Отсутствие указания какой-либо команды после того, как ярлык плагина автоматически переходит в list
. Это означает, что bin/plugin [slug] list
и bin/plugin [slug]
являются эквивалентами.
Как видите, большинство параметров и команд соответствуют зарезервированному списку. Фактические команды, предлагаемые плагином входа в систему, - это add-user
, new-user
и newuser
.
Как вы можете заметить, описание всех трех команд идентично. Это потому, что по выбору 3 команды абсолютно одинаковы. add-user и newuser фактически являются псевдонимами для new-user, что позволяет легко угадать команду, не зная и не запоминая её.
Теперь, когда мы знаем, что плагин входа в систему поставляется с командой new-user
, нам нужно только узнать, как её использовать. Здесь появляется зарезервированная команда help. Запустим bin/plugin login help new-user
.
Теперь у нас есть полное представление о команде new-user
. Попробуем создать нового пользователя. Поскольку все параметры по определению являются необязательными, мы намеренно опускаем пароль (позже нас спросят об этом).
bin/plugin login newuser -u joeuser -e joeuser@grav.org -P b -N "Joe User" -t "Site Administrator"
Creating new user
Enter a password: *********
Repeat the password: *********
Success! User joeuser created.
Разработчикам: интеграция интерфейса командной строки в плагин⚓︎
Как разработчик вы можете захотеть создавать команды интерфейса командной строки для запуска администраторами или пользователями. Добавить такую функциональность в плагин очень просто.
Первое, что вам нужно сделать, это создать подпапку cli/ в корне вашего плагина. Эта папка будет обработана bin/plugin
и просканирована на предмет классов команд.
CLI Grav основан на замечательном Symfony Console Component, и вы можете в значительной степени следить за их документацией для получения полной справки, есть только несколько важных вещей, которые следует учитывать.
- Имя файла класса стандартное. Он должен начинаться с заглавной буквы и заканчиваться ** Command.php **.
Hello.php
: НЕПРАВИЛЬНОhelloworldCommand.php
: НЕПРАВИЛЬНОHelloworldCommand.php
: ВЕРНОHelloWorldCommand.php
: ВЕРНО
- Вы всегда должны расширять
ConsoleCommand
, это предложит вам некоторые дополнительные возможности Grav, такие как форматированные цвета, прямой доступ к экземпляру Grav и другим утилитам (подробнее). - Консоль Symfony требует метода execute. При расширении ConsoleCommand это становится
serve
.
Ниже приведен простой пример для начала. Вы можете протестировать его как есть, сохранив его как HelloCommand.php
и поместив его в корневую папку вашего плагина cli/ (user/plugins/my_plugin/cli/HelloCommand.php).
<?php
namespace Grav\Plugin\Console;
use Grav\Console\ConsoleCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
/**
* Class HelloCommand
*
* @package Grav\Plugin\Console
*/
class HelloCommand extends ConsoleCommand
{
/**
* @var array
*/
protected $options = [];
/**
* Greets a person with or without yelling
*/
protected function configure()
{
$this
->setName("hello")
->setDescription("Greets a person.")
->addArgument(
'name',
InputArgument::REQUIRED,
'The name of the person that should be greeted'
)
->addOption(
'yell',
'y',
InputOption::VALUE_NONE,
'Wheter the greetings should be yelled or quieter'
)
->setHelp('The <info>hello</info> greets someone.')
;
}
/**
* @return int|null|void
*/
protected function serve()
{
// Collects the arguments and options as defined
$this->options = [
'name' => $this->input->getArgument('name'),
'yell' => $this->input->getOption('yell')
];
// Prepare the strings we want to output and wraps the name into a cyan color
// More colors available at:
// https://github.com/getgrav/grav/blob/develop/system/src/Grav/Console/ConsoleTrait.php
$greetings = 'Greetings, dear <cyan>' . $this->options['name'] . '</cyan>!';
// If the optional `--yell` or `-y` parameter are passed in, let's convert everything to uppercase
if ($this->options['yell']) {
$greetings = strtoupper($greetings);
}
// finally we write to the output the greetings
$this->output->writeln($greetings);
}
}
Ещё один хороший простой пример можно найти в плагине Error (LogCommand.php). Если вы ищете пример посложнее — посмотрите плагин Login (NewUserCommand.php)