创建一个命令
命令通过类来定义,这些类必须存放在你的bundle (如 AppBundle\Command) 的 Command 命名空间下。类名必须是 Command 后缀。
例如,一个名为 CreateUser 的命令必须遵循此结构:
// src/AppBundle/Command/CreateUserCommand.php namespace AppBundle\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class CreateUserCommand extends Command { protected function configure() { // ... } protected function execute(InputInterface $input, OutputInterface $output) { // ... } }
配置命令
首先,你必须在configure()方法中配置命令的名称。然后可选地定义一个帮助信息(help message)和 输入选项及输入参数(input options and arguments):
// ... protected function configure() { $this // the name of the command (the part after "bin/console") // 命令的名字("bin/console" 后面的部分) ->setName('app:create-users') // the short description shown while running "php bin/console list" // 运行 "php bin/console list" 时的简短描述 ->setDescription('Creates new users.') // the full command description shown when running the command with // the "--help" option // 运行命令时使用 "--help" 选项时的完整命令描述 ->setHelp("This command allows you to create users...") ; }
执行命令
配置命令之后,你就能在终端(terminal)中执行它:
php bin/console app:create-users
你可能已经预期,这个命令将什么也不做,因为你还没有写入任何逻辑。在execute()方法里添加你自己的逻辑,这个方法可以访问到input stream(如,选项和参数)和output stream(以写入信息到命令行):
// ... protected function execute(InputInterface $input, OutputInterface $output) { // outputs multiple lines to the console (adding "\n" at the end of each line) // 输出多行到控制台(在每一行的末尾添加 "\n") $output->writeln([ 'User Creator', '============', '', ]); // outputs a message followed by a "\n" $output->writeln('Whoa!'); // outputs a message without adding a "\n" at the end of the line $output->write('You are about to '); $output->write('create a user.'); }
现在,尝试执行此命令:
$ php bin/console app:create-user
User Creator
============
Whoa!
You are about to create a user.