Вы создаете полное приложение Symfony, поэтому доступны все команды, предоставляемые включенными пакетами.
Вместо того, чтобы начинать с фреймворка и пытаться обрезать ненужные части, вам нужно начинать с дальнейших шагов, чтобы получить действительно скелетный проект.
Начальная загрузка проекта:
Во-первых, не используйте команду symfony
, нет необходимости. Простой старый композитор сделает свое дело.
В пустом каталоге выполните:
composer require symfony/console
Это импортирует единственную зависимость, необходимую для консольного проекта, и выполнитебазовый загрузчик для вашего автозагрузчика.
В composer.json
добавьте следующее:
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
Командный класс
Вам понадобится одна или несколько команд для фактического добавленияк вашему заявлению. Давайте начнем с полноценного приветствия. Создайте файл src/Greet.php
в своем проекте:
declare(strict_types=1);
namespace App;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class Greet extends Symfony\Component\Console\Command\Command
{
protected function configure()
{
$this->addArgument('person', InputArgument::OPTIONAL, 'Name of the Entity being greeted', 'World');
$this->addOption('greeting', 'g', InputOption::VALUE_OPTIONAL, 'How to greet the entity', 'Hello');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$greeting = $input->getOption('greeting');
$entity = $input->getArgument('person');
$output->writeln("<info>$greeting $entity!</info>");
}
}
Это основная команда, которая выведет «Hello World!»если выполняется без какой-либо опции или аргумента, примет один аргумент использования вместо «World» и один вариант для установки приветствия вместо «Hello».
Консольное приложение
В корне проекта создайте файл app.php
.
require __DIR__ . '/vendor/autoload.php';
$app = new Symfony\Component\Console\Application('Hello World App', '1.0.0');
$app->add((new App\Greet('greet')));
$app->run();
Это очень короткий скрипт, поэтому давайте построчно
- Требуется автозагрузчик . Этот сценарий является точкой входа для приложения, поэтому нам нужно запустить автозагрузчик.
- Создание приложения. Это создает новый экземпляр приложения Symfony Console, задает имя и версиюдля приложения. Это будет использоваться в распечатках «справки» для приложения.
- Добавить команду . По умолчанию приложение не имеет команд вообще. Нам нужно добавить команду, которую мы только что создали.
add()
ожидает Command
экземпляр. Мы создаем экземпляр команды, которую мы только что создали, и задаем ее вызывать с именем «greet». - Запустить приложение
Создать автозагрузчик.
Выполните composer dump-autoload
, чтобы сгенерировать автозагрузчик для вашего приложения.
Выполните сценарий.
Если вы сейчас выполните php app.php
, вы получите:
Hello World App 1.0.0
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
greet
help Displays help for a command
list Lists commands
Обратите внимание, что единственная доступная команда - greet
. Что вы можете использовать, как это:
# php app.php greet
Hello World!
# php app.php greet Alice
Hello Alice!
# php app.php greet Bob -g "Good morning"
Good morning Bob!
# php app.php help greet
Usage:
greet [options] [--] [<person>]
Arguments:
person Name of the Entity being greeted [default: "World"]
Options:
-g, --greeting[=GREETING] How to greet the entity [default: "Hello"]
[... default generic options omitted]