在框架中编写脚本要远比自己单独写脚本要方便很多,因为你可以随便调用框架的各种功能。
创建脚本文件
php artisan make:command TestCommand
将会在 app/Console/Commands
下创建一个文件 TestCommand.php
,Lumen框架不支持这个命令,需要自己手动新建文件。
TestCommand.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class TestCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'TestCommand';
/**
* The console command description.
*
* @var string
*/
protected $description = 'TestCommand';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
}
}
注册command
app\console\Commands\Kernel.php
文件中的$commands数组中新增一行:
TestCommand::class,
执行命令
php artisan TestCommand
不能使用 php TestCommand.php,会报各种错误。
高级部分
1、命令行传参
先要定义
protected $signature = 'TestCommand {param1} {--param2=}';
// 可以设置默认值,否则漏传的话就会报错
protected $signature = 'TestCommand {param1=1} {--param2=2}';
其中 param1 和 param2 为两种常用的传参方式,获取方式分别为:
$param1 = $this->argument('param1');
$param2 = $this->option('param2');
2、继承自父类的常用方法:
获取参数:
hasArgument
argument
arguments
hasOption
option
options
交互:
confirm 确认提示
ask 提问
secret 输入密码,用户的输入会被hide
anticipate 用户选择答案,提供默认答案
。。。
输出
$this->line($param1);
$this->info($param2);
$this->comment($param2);
question
error
warn
alert
。。。
示例:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class TestCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'TestCommand {param1} {--param2=}';
/**
* The console command description.
*
* @var string
*/
protected $description = 'TestCommand';
public $actionArr = [
0=>'initIssue',
1=>'getArticleCount',
2=>'initArticleTitle',
3=>'randomArticle',
];
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$param1 = $this->argument('param1');
$param2 = $this->option('param2');
$this->line($param1);
$this->info($param2);
$this->comment($param2);
$this->initConsole();
return true;
}
public function initConsole(){
$answer = $this->choice('请选择要操作的数字', $this->actionArr);
if(array_key_exists(intval($answer), $this->actionArr) || in_array($answer, $this->actionArr)){
$this->info('正在执行:' . $answer . PHP_EOL);
$this->$answer();
}
// 持续交互
$this->initConsole();
}
public function getArticleCount(){
}
}
打印
进度条
$users = 10;
$bar = $this->output->createProgressBar($users);
for($i = 1; $i<=$users;$i++){
sleep(1);
$bar->advance();
}
$bar->finish();