如何隐藏或删除默认可用的控制台命令?
How to hide or delete the defaults available console commands?
我通过 symfony new my_project_name
创建了一个新的 Symfony 4 项目。
目前当我执行./bin/console
时,输出显示
我将创建一些自定义控制台命令,我希望在执行时仅显示我的自定义命令./bin/console
也许我应该从头开始创建自定义可执行文件 'console',但我不知道该怎么做。
您正在创建一个完整的 Symfony 应用程序,因此包含的软件包提供的所有命令都可用。
与其从一个框架开始并尝试 trim 减少您不想要的部分,您需要从更深的部分开始才能拥有一个真正准系统的项目。
正在引导项目:
首先,不要使用symfony
命令,没必要。普通的老作曲家就可以做到这一点。
在空目录中,执行:
composer require symfony/console
这将导入控制台项目所需的唯一依赖项,并为自动加载器执行基本引导。
在composer.json
中添加以下内容:
"autoload": {
"psr-4": {
"App\": "src/"
}
}
命令class
您需要一个或多个命令才能真正添加到您的应用程序中。让我们从一个成熟的问候语应用程序开始。在您的项目中创建文件 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 控制台应用程序的新实例,并为应用程序设置名称和版本。这将在应用程序的 "help" 打印输出中使用。
- 添加命令。默认情况下,应用程序根本没有命令。我们需要添加刚刚创建的命令。
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]
我通过 symfony new my_project_name
创建了一个新的 Symfony 4 项目。
目前当我执行./bin/console
时,输出显示
我将创建一些自定义控制台命令,我希望在执行时仅显示我的自定义命令./bin/console
也许我应该从头开始创建自定义可执行文件 'console',但我不知道该怎么做。
您正在创建一个完整的 Symfony 应用程序,因此包含的软件包提供的所有命令都可用。
与其从一个框架开始并尝试 trim 减少您不想要的部分,您需要从更深的部分开始才能拥有一个真正准系统的项目。
正在引导项目:
首先,不要使用symfony
命令,没必要。普通的老作曲家就可以做到这一点。
在空目录中,执行:
composer require symfony/console
这将导入控制台项目所需的唯一依赖项,并为自动加载器执行基本引导。
在composer.json
中添加以下内容:
"autoload": {
"psr-4": {
"App\": "src/"
}
}
命令class
您需要一个或多个命令才能真正添加到您的应用程序中。让我们从一个成熟的问候语应用程序开始。在您的项目中创建文件 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 控制台应用程序的新实例,并为应用程序设置名称和版本。这将在应用程序的 "help" 打印输出中使用。
- 添加命令。默认情况下,应用程序根本没有命令。我们需要添加刚刚创建的命令。
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]