Вы создаете законченное приложение 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!» если выполняется без каких-либо опций или аргументов, будет принят один аргумент вместо «Мир» и одна опция для установки приветствия вместо «Привет».
Консольное приложение
В корне проекта создайте файл 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]
person
yivi
schedule
29.10.2019