感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
当构建一个命令行工具时,你可能不需要提供多个命令。这时,次次都要传入命令的名字(name)是单调乏味的。幸运的是,通过对程序的扩展,删除此种“需求”成为了可能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | namespace Acme\Tool;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
class MyApplication extends Application
{
/**
* Gets the name of the command based on input. 基于input得到命令的名字
*
* @param InputInterface $input The input interface
*
* @return string The command name
*/
protected function getCommandName(InputInterface $input)
{
// This should return the name of your command. 这里返回你命令的名字
return 'my_command';
}
/**
* Gets the default commands that should always be available.
* 取得默认命令,它应该是永远可用的
*
* @return array An array of default Command instances
*/
protected function getDefaultCommands()
{
// Keep the core default commands to have the HelpCommand
// which is used when using the --help option
// 保留核心的默认命令以便拥有HelpCommand,在用户使用--help选项时会用到
$defaultCommands = parent::getDefaultCommands();
$defaultCommands[] = new MyCommand();
return $defaultCommands;
}
/**
* Overridden so that the application doesn't expect the command
* name to be the first argument.
* 覆写之,以便程序不再预期这个命令的名字作为第一个参数
*/
public function getDefinition()
{
$inputDefinition = parent::getDefinition();
// clear out the normal first argument, which is the command name
// 去除通常情况下的第一个参数,也就是命令的名字
$inputDefinition->setArguments();
return $inputDefinition;
}
} |
当调用你的console脚本时,MyCommand命令将被使用,毋须传入其名字。
同时你还可以简化对该脚本的执行过程:
1 2 3 4 5 6 7 8 | #!/usr/bin/env php
<?php
// command.php
use Acme\Tool\MyApplication;
$application = new MyApplication();
$application->run(); |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。