Laravel中编写命令行脚本,交互

50 篇文章 2 订阅

在框架中编写脚本要远比自己单独写脚本要方便很多,因为你可以随便调用框架的各种功能。

创建脚本文件

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值