Laravel命令Artisan介绍和使用
当我们新建一个Laravel项目后,其项目根目录下就有一个artisan文件,并且是可以执行的。
zhj@DESKTOP-06Q5JL3 MINGW64 /e/php/laravel/blog
$ ll
total 222
drwxr-xr-x 1 zhj 197121      0 11月  3  2018 app/
-rwxr-xr-x 1 zhj 197121   1686 8月  11  2018 artisan*
drwxr-xr-x 1 zhj 197121      0 8月  11  2018 bootstrap/
-rw-r--r-- 1 zhj 197121   1513 9月   4  2018 composer.json
-rw-r--r-- 1 zhj 197121 184478 9月   4  2018 composer.lock
drwxr-xr-x 1 zhj 197121      0 9月   4  2018 config/
drwxr-xr-x 1 zhj 197121      0 8月  11  2018 database/
-rw-r--r-- 1 zhj 197121   1022 8月  11  2018 package.json
-rw-r--r-- 1 zhj 197121   1134 8月  11  2018 phpunit.xml
drwxr-xr-x 1 zhj 197121      0 9月   6  2018 public/
drwxr-xr-x 1 zhj 197121      0 8月  11  2018 resources/
drwxr-xr-x 1 zhj 197121      0 9月   4  2018 routes/
-rw-r--r-- 1 zhj 197121    563 8月  11  2018 server.php
drwxr-xr-x 1 zhj 197121      0 9月   4  2018 storage/
drwxr-xr-x 1 zhj 197121      0 8月  11  2018 tests/
drwxr-xr-x 1 zhj 197121      0 9月   4  2018 vendor/
-rw-r--r-- 1 zhj 197121    549 8月  11  2018 webpack.mix.js
-rw-r--r-- 1 zhj 197121      0 8月  11  2018 yarn-error.log
所以我们可以在项目中使用artisan命令来执行很多操作。
一、Laravel自带的命令
可以使用 php artisan list 来查看所有的内置命令。这里的命令比较多,所以不再这里进行说明了。
1、运行 Artisan 命令时可以传入的选项参数:
- -q:禁止所有输出
 - -v、-vv、-vvv:命令执行输出的三个级别,分别代表正常、详细、调试
 - –no-interaction:不会问任何交互问题,所以适用于运行无人值守自动处理命令
 - –env:允许你指定命令运行的环境
 - –version:打印当前 Laravel 版本
 
使用示例:
$ php artisan -V
Laravel Framework 5.6.33
2、常见的命令
- help:为指定命令提供使用帮助信息,如 php artisan help make:request
 - clear-compiled:移除编译过的类文件,比如缓存、Blade视图文件等
 - down:将应用切换到维护模式以便查找问题
 - up:将应用从维护模式恢复为正常模式
 - env:显示应用当前运行环境,如 local、production
 - migrate:运行所有数据库迁移
 - optimize:优化应用以便提供更好的性能
 - serve:在本地 localhost:8000 端口启动 PHP 内置服务器
 - tinker:进入 Tinker REPL
 - dump-server:启动 dump server 收集 dump 信息
 - preset:切换应用前端框架脚手架代码,比如从 Vue 切换到 React
 
使用示例:
$ php artisan help make:request
Description:
  Create a new form request class
Usage:
  make:request <name>
Arguments:
  name                  The name of the class
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
      --env[=ENV]       The environment the command should run under
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
3、分组命令
- app:只包含 app:name 命令,用于替换应用默认命名空间 App\
 - auth:只包含 auth:clear-resets,用于从数据库清除已过期的密码 Token
 - cache:应用缓存相关命令
 - config:config:cache 用于缓存应用配置,config:clear 用于清除缓存配置
 - db:db:seed 用于通过填充器填充数据库(如果编写了填充器的话)
 - event:event:generate 用于根据注册信息生成未创建的事件类及监听器类
 - key:key:generate 用于手动设置应用的 APP_KEY
 - make:用于根据模板快速生成应用各种脚手架代码,如认证、模型、控制器、数据库迁移文件等等等,我们会将每个命令穿插在相应教程中介绍
 - migrate:数据库迁移相关命令(数据库教程中会详细介绍)
 - notifications:notifications:table 用于生成通知表
 - optimize:optimize:clear 用于清除缓存的启动文件
 - package:package:discover 用于重新构建缓存的扩展包 manifest
 - queue:队列相关命令(队列教程中会详细介绍)
 - route:路由相关命令,route:cache 和 route:clear 分别用于缓存路由信息和清除路由缓存,route:list 用于列出应用所有路由信息
 - schedule:调度任务相关命令(调度任务教程中会介绍)
 - session:对于数据库驱动的 Session,我们通过 session:table 生成 sessions 数据表
 - storage:storage:link 生成一个软链 public/storage 指向 storage/app/public
 - vendor:vendor:publish 用于发布扩展包中的公共资源
 - view:view:cache 用于编译应用所有 Blade 模板,view:clear 用于清除这些编译文件
 
常见命令的使用可以参考:Laravel 5.1 LTS 速查表
二、自定义Artisan命令
1、创建命令类
$ php artisan make:command ShowInfo --command=show:info
Console command created successfully.
创建成功后,会在app/Console/Commands下创建一个ShowInfo.php文件。该命令的第一个参数就是要创建的 Artisan 命令类名,还可以传递一个选项参数 --command 用于自定义该命令的名称,不指定的话会系统会根据类名自动生成。
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ShowInfo extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'show:info';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'show info';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}
2、注册命令
app/Console/Kernel.php 中注册才能使用,所以需要在该文件中添加如下信息:
protected $commands = [ \App\Console\Commands\ShowInfo::class, ];
这里就注册完成了,现在可以通过php artisan list查看我们添加的命令了。如:
... session session:table Create a migration for the session database table show show:info show info storage storage:link Create a symbolic link from "public/storage" to "storage/app/public" ...
3、在ShowInfo.php命令文件中添加信息
    public function handle()
    {
        //
        $this->info("Hello Laravel");
    }
然后执行命令:
$ php artisan show:info
Hello Laravel
到这里就算完成了一个基本的命令。
4、基于闭包实现 Artisan 命令
通过这种方式实现命令,需要在routes/console.php中去实现,如:
Artisan::command('show:version', function () {
    $this->info(app()->version());
})->describe('show Laravel version');
通过php artisan list可以查看
... session session:table Create a migration for the session database table show show:info show info show:version show Laravel version storage storage:link Create a symbolic link from "public/storage" to "storage/app/public" ...
执行命令:
$ php artisan show:version
5.6.33
三、Artisan命令
1、定义参数
1.1、要定义一个必填参数,需要用花括号将其包裹起来
show:info {name}
1.2、要定义一个可选参数,可以在参数名称后面加一个问号
show:info {name?}
1.3、要为可选参数定义默认值
show:info {name=Laravel}
示例:
protected $signature = 'show:info {param_1:param_1 description} {param_2:param_2 description?} {param_3:param_3 description=Laravel}';
显示命令帮助:
$ php artisan help show:info
Description:
  show info
Usage:
  show:info <param_1:param_1 description> [<param_2:param_2 description> [<param_3:param_3 description>]]
Arguments:
  param_1:param_1 description
  param_2:param_2 description
  param_3:param_3 description   [default: "Laravel"]
可以看出参数1必传,参数2选填,参数3有默认值
2、定义选项
选项和参数很像,但是选项有前缀 --,而且可以在没有值的情况下使用。
2.1、添加一个最基本的选项,可以通过花括号将其包裹
show:info {--option}
2.2、选项必须要设置选项值,可以加上一个 =
show:info {--option=}
2.3、设置默认选项值
show:info {--option=value}
2.4、缩写,比如我们可以通过 O 来代表 option
show:info {--O|option}
示例:
protected $signature = 'show:info {--option_1} {--option_2=} {--option_3=value} {--O|option_4}';
显示命令帮助:
$ php artisan help show:info
Description:
  show info
Usage:
  show:info [options]
Options:
      --option_1
      --option_2[=OPTION_2]
      --option_3[=OPTION_3]   [default: "value"]
  -O, --option_4
3、数组参数和数组选项
不管是参数还是选项,如果你想要接收数组作为参数,都要使用 * 通配符:
show:info {name*} {--option*}
注:数组参数必须是参数列表中的最后一个参数。
5、获取参数和选项的方法
5.1、获取参数
$this->argument()
5.2、获取选项
$this->option()
使用示例:
protected $signature = 'show:info {param} {--option=}';
public function handle()
{
    $this->info("Hello Laravel:param=".$this->argument('param').' --option='.$this->option('option'));
}
运行命令:
$ php artisan show:info Laravel --option=5.6
Hello Laravel:param=Laravel --option=5.6
三、Artisan命令交互
3.1、提示输入文本
$username = $this->ask('请输入用户名:');
3.2、输入敏感信息
$password = $this->secret("请输入密码:");
3.3、确认信息
$confirm = $this->confirm("确认要执行下面的命令吗?");
3.4、提示功能(暂未测试成功)
$city = $this->anticipate('你来自哪个城市', [ 
    "北京", 
    "杭州", 
    "深圳" 
]);
3.5、提供选项让用户选择
$framework = $this->choice('框架名字?', ['Laravel', 'Academy']);
3.6、输出信息
$this->info("令执行成功后通过该方法以绿色文本输出提示信息");
$this->error("红色高亮文本输出错误信息");
$this->question("输出问题(靛蓝色高亮)");
$this->comment("注释信息(黄色)");
$this->line("输出行信息(没有颜色)");
3.7、表格
$headers = ['姓名', '城市'];
$data = [
    ['张三', '北京'],
    ['李四', '上海']
];
$this->table($headers, $data);
3.8、进度条
$totalUnits = 100;
$this->output->progressStart($totalUnits);
$i = 0;
while ($i++ < $totalUnits) {
    usleep(100000);
    $this->output->progressAdvance(1);
}
$this->output->progressFinish();
以上整体代码如下:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ShowInfo extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'show:info';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'show info';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $username = $this->ask('请输入用户名:');
        $this->info("输入的用户名为:" . $username);
        $password = $this->secret("请输入密码:");
        $this->info("输入的密码为:" . $password);
        $confirm = $this->confirm("确认要执行下面的命令吗?");
        if ($confirm) {
            $this->info('继续执行');
        } else {
            $this->info('不执行');
            exit;
        }
        $framework = $this->choice('框架名字?', ['Laravel', 'Academy']);
        $this->info($framework);
        $this->info("令执行成功后通过该方法以绿色文本输出提示信息");
        $this->error("红色高亮文本输出错误信息");
        $this->question("输出问题(靛蓝色高亮)");
        $this->comment("注释信息(黄色)");
        $this->line("输出行信息(没有颜色)");
        $headers = ['姓名', '城市'];
        $data = [
            ['张三', '北京'],
            ['李四', '上海']
        ];
        $this->table($headers, $data);
        $totalUnits = 100;
        $this->output->progressStart($totalUnits);
        $i = 0;
        while ($i++ < $totalUnits) {
            usleep(100000);
            $this->output->progressAdvance(1);
        }
        $this->output->progressFinish();
    }
}
执行命令后效果如下:
E:\php\laravel\blog>php artisan show:info
 请输入用户名::
 > xiaohai
输入的用户名为:xiaohai
 请输入密码::
 >
输入的密码为:123456
 确认要执行下面的命令吗? (yes/no) [no]:
 > yes
继续执行
 框架名字?:
  [0] Laravel
  [1] Academy
 > 0
Laravel
令执行成功后通过该方法以绿色文本输出提示信息
红色高亮文本输出错误信息
输出问题(靛蓝色高亮)
注释信息(黄色)
输出行信息(没有颜色)
+------+------+
| 姓名 | 城市 |
+------+------+
| 张三 | 北京 |
| 李四 | 上海 |
+------+------+
 100/100 [============================] 100%
四、应用代码中调用 Artisan 命令
除了在命令行运行 Artisan 命令之外,还可以在应用代码中通过 Artisan 门面调用它。你可以直接通过 Artisan:call() 调用指定命令,也可以通过 Artisan:queue() 将命令推送到队列中执行。
这两种方式都需要传递两个参数:第一个参数是命令名(比如 welcome:message),第二个参数是以数组形式传递的命令参数和选项。下面,我们简单演示在路由闭包中调用 Artisan 命令 show:info(带输入参数的):
Route::get('test_artisan', function () { $exitCode = Artisan::call('show:info', [ 'param' => 'Laravel', '--option' => '5.6' ]); });
正如你所看到的,参数和选项通过参数名和选项名作为键,如果选项没有值的话,以 true 或 false 替代。
你还可以在一个 Artisan 命令类中调用另一个 Artisan 命令,在命令类中调用 Artisan 命令,可以通过 Artisan:call(),也可以直接通过 $this->call() 方法,还可以通过 $this->callSilent() 方法(该方法会抑制所有输出),传递的参数格式完全一样。
最后,你还可以在任意类中注入实现了 Illuminate\Contracts\Console\Kernel 契约的实例,然后调用实例上的 call() 方法,本质上都是调用了一个方法,所以参数都是一样的。
快速生成表格
为了将一个大的数据进行压缩,可以采用Gzip的方式进行处理,那么在Go语言中如何通过Gzip方式压缩数据呢,在使用过程中大家也会跟我一样会踩坑。本文主要记录下问题和最终的实现方式。
网页扫描二维码库:Html5-Qrcode,官网地址:https://scanapp.org/html5-qrcode-docs/
《康熙王朝》是一部非常优秀的电视连续剧,陈道明演的康熙是我觉得最有帝王气魄,让人意犹未尽,本文主要记录一小段非常经典的对白。
默认情况下 pip 使用的是国外的镜像,在下载的时候速度非常慢,本文我们介绍使用国内源对pip进行加速。
Electron页面跳转、浏览器打开链接和打开新窗口
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。