1. 简介

Artisan 是 Laravel 自带的命令行接口,它提供了许多实用的命令来帮助你构建 Laravel 应用

查看所有可用命令列表

php artisan list
Available commands:
clear-compiled # optimize操作的反向,清除生成的文件
down # 将站点设为维护状态
env # 显示项目现在运行所处的环境(local或其他)
help # 帮助信息
inspire # 输出一句名言,位于routes/console.php
list # 列出所有命令
migrate # 运行迁移文件
optimize # 优化应用程序性能,生成自动加载文件,先要运行config:cache命令
preset Swap the front-end scaffolding for the application
serve # 使用 PHP 内置的开发服务器启动应用 【要求 PHP 版本在 5.4 或以上】
tinker # 进入与当前应用环境绑定的 REPL 环境,相当于 Rails 框架的 rails console 命令
up # 将站点设回可访问状态
app
app:name # 设置应用程序命名空间
auth
auth:clear-resets # 清除过期的密码重置密钥
cache
cache:clear # 清除应用程序缓存
cache:forget Remove an item from the cache
cache:table # 创建一个缓存数据库表的迁移
config
config:cache # 生成文件 bootstrap/cache/config.php,把 config 文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量,不会自动重载,开发时候建议关闭
config:clear # 清除缓存的config.php文件
db
db:seed # 生成测试数据文件
event
event:generate Generate the missing events and listeners based on registration
key
key:generate # 生成一个随机的 key,并自动更新到 config/app.php 的 key 键值对
make
make:auth # 快速构建登录注册功能,生成基本的登录注册视图,路由等
make:command Create a new Artisan command
make:controller Create a new controller class
make:event Create a new event class
make:factory Create a new model factory
make:job Create a new job class
make:listener Create a new event listener class
make:mail Create a new email class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model class
make:notification Create a new notification class
make:policy Create a new policy class
make:provider Create a new service provider class
make:request Create a new form request class
make:resource Create a new resource
make:rule Create a new validation rule
make:seeder Create a new seeder class
make:test Create a new test class
migrate
migrate # 运行一次迁移
migrate:fresh # 直接drop掉table然后重置,注意与resfresh的区别
migrate:install # 初始化迁移数据表
migrate:refresh # 根据迁移文件中down方法重置,并重新执行所有的数据迁移
migrate:reset # 回滚所有的数据迁移
migrate:rollback # 回滚最近一次数据迁移
migrate:status # 显示每一次迁移的状态
notifications
notifications:table Create a migration for the notifications table
package
package:discover Rebuild the cached package manifest
queue
queue:failed List all of the failed queue jobs
queue:failed-table Create a migration for the failed queue jobs database table
queue:flush Flush all of the failed queue jobs
queue:forget Delete a failed queue job
queue:listen Listen to a given queue
queue:restart Restart queue worker daemons after their current job
queue:retry Retry a failed queue job
queue:table Create a migration for the queue jobs database table
queue:work Start processing jobs on the queue as a daemon
route
route:cache # 生成bootstrap/cache/routes.php文件,提高路由效率,注意路由缓存不会随着更新而自动重载,开发时候建议关闭
route:clear # 清除生成的路由缓存
route:list # 展示所有路由信息
schedule
schedule:run Run the scheduled commands
session
session:table Create a migration for the session database table
storage
storage:link Create a symbolic link from "public/storage" to "storage/app/public"
vendor
vendor:publish # 开发包的时候,将包中文件根据你的设置发布到laravel工程对应目录
view
view:clear # 清除storage/framework/views文件夹下的视图缓存文件
# 一些常用命令
php artisan make:controller IndexController   # 大驼峰写法
php artisan make:model Models/UserAccount  # 可以指定目录,单数大驼峰写法
php artisan make:migration create_user_accounts_table --create=user_accounts # 蛇形复数写法
php artisan make:model UserAccount -m  # 生成model和数据迁移文件 大驼峰单数写法
php artisan make:seeder StudentsTableSeeder
php artisan db:seed --class=StudentsTableSeeder
php artisan –version # 显示当前使用的 Laravel 版本 # 关于缓存的命令
php artisan optimize # 在bootstrap/cache/下生成packages.php ,services.php文件
php artisan clear-compiled # optimize操作的反向 php artisan config:cache
php artisan config:clear php artisan route:cache
php artisan route:clear php artisan view:clear

2. 编写命令

2.1 构建自己的命令

命令默认存储在app/Console/Commands目录,可以通过以下方法生成命令文件

php artisan make:command SendEmails

文件内容

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\User; class SendEmails extends Command
{ // 1. 命令, php artisan list 会显示
protected $signature = 'command:send_email {user_id}'; // 2. 命令的描述, php artisan list 会显示
protected $description = 'send an email to user. eg: php artisan command:send_email 1'; public function __construct()
{
parent::__construct();
} // 3. 命令的逻辑
public function handle()
{
// 通过$this->argument()命令的参数
$user =User::find($this->argument('user_id'));
dd($user); // 给该用户发送邮件的逻辑
}
}

使用方法

php artisan command:sen_email 1

2.2 闭包命令

首先查看 app/Console/Kernel.php,commands方法分别加载了自建命令文件和闭包命令

protected function commands()
{
//1. 加载 Commands里面的文件,也就是我们使用命令创建的文件
$this->load(__DIR__.'/Commands'); //2. 加载 reoute/console.php里面的闭包命令
require base_path('routes/console.php');
}

打开routes/console.php

<?php

use Illuminate\Foundation\Inspiring;

//command 方法接收两个参数:命令签名 和一个接收命令参数和选项的闭包:
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');

发现inspire命令在此定义,测试下,发现会输出一句名言

$ php artisan inspire
He who is contented is rich. - Laozi

自己创建一个闭包命令试试

Artisan::command('build {project}', function ($project) {
$this->info("Building {$project}!");
})->describe('Build the project');

测试

$ php artisan build test
Building test!

3. 定义输入期望

通过设置app/Console/Commands/xxx.php中的signature属性来定义

  1. 参数

    形式:{xxx} ,用花括号包起来
// 必须参数
protected $signature = 'email:send {user}'; // 可选参数...
protected $signature = 'email:send {user?}'' // 带有默认值的可选参数...
protected $signature = 'email:send {user=foo}''
  1. 选项

形式:{--xxx} , -- 作为前缀,并用花括号包裹

// 开关选项 --queue 开关被传递,该选项的值为 true ,否则为 false
protected $signature = 'email:send {user} {--queue}'; // 带值的选项 queue的值为传递的值
protected $signature = 'email:send {user} {--queue=}'; // 带默认值的选项
protected $signature = 'email:send {user} {--queue=default}'; // 选项简写
rotected $signature = 'email:send {user} {--Q|queue}'
  1. 输入数组
// php artisan email:send foo bar
// 则user的值为['foo', 'bar']
rotected $signature = 'email:send {user*}' // 在定义期望数组输入的选项时,传递给命令的每个选项值都应以选项名称为前缀:
// php artisan email:send --id=1 --id=2
email:send {user} {--id=*}
  1. 输入说明

你可以通过冒号为输入参数和选项分配说明文字。如果你需要一点额外的空间来定义你的命令,可以随意将多个行分开:

protected $signature = 'email:send
{user : The ID of the user}
{--queue= : Whether the job should be queued}';

4.I/O 命令

  1. 检索输入
// 检索特定参数
$userId = $this->argument('user');
// 所有参数 以 array 检索
$arguments = $this->arguments(); // 检索特定选项...
$queueName = $this->option('queue');
// 检索所有选项...
$options = $this->options();

如果参数或选项不存在,则返回 null

  1. 交互式输入
// ask 方法将提示用户给定问题,接收他们的输入,然后将用户的输入返回到你的命令:
$name = $this->ask('What is your name?'); // 类似于ask方法,但是输入内容不可见
$password = $this->secret('What is the password?'); // 请求确认,默认情况下,该方法将返回 false。但是,如果用户根据提示输入 y 或者 yes 则会返回 true。
if ($this->confirm('Do you wish to continue?')) {
//
} // 自动补全 不管提示的内容是什么,用户仍然可以选择任何回答
$name = $this->anticipate('What is your name?', ['Taylor', 'Dayle']); //给用户提供预定义的一组选择,可以使用 choice 方法。如果用户未选择任何选项,你可以返回设置的默认值:
$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], $default);
  1. 编写输出
  • 普通信息

    可以使用 line 、info 、 comment 、 question 和 error 方法来将输出发送到终端。每个方法都有适当的 ANSI 颜色来作为表明其目的。
$this->info('Display this on the screen');
$this->error('Something went wrong!');
$this->line('Display this on the screen');
  • table表布局
$headers = ['Name', 'Email'];

$users = App\User::all(['name', 'email'])->toArray();

$this->table($headers, $users);
  • 进度条

首先,定义进程将遍历的步骤总数。然后,在处理每个项目后推进进度栏

$users = App\User::all();

$bar = $this->output->createProgressBar(count($users));

foreach ($users as $user) {
$this->performTask($user); $bar->advance();
} $bar->finish();

5. 注册命令

  • 方法1 在commans方法中载入目录

app/Console/Commands 目录下的所有命令都将自动注册到 Artisan。 实际上,你可以自由地调用 load 方法来扫描 Artisan 命令的其他目录:

/**
* 注册应用程序的命令。
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
$this->load(__DIR__.'/MoreCommands'); // ...
}
  • 方法2 定义$commands属性

类名添加到 app/Console/Kernel.php 文件的 $command 属性来手动注册命令。当 Artisan 启动时,该属性中列出的所有命令将由 服务容器 解析并在 Artisan 注册:

protected $commands = [
Commands\SendEmails::class
];

6. 调用命令

  1. 在CLI之外执行命令,可以通过call方法,比如在控制器或者路由触发
Route::get('/foo', function () {
$exitCode = Artisan::call('email:send', [
'user' => 1, '--queue' => 'default'
]); //
});
  1. 将Artisan命令交给队列处理

需要确保队列已经正确配置,并运行了队列监听器

Route::get('/foo', function () {
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]); //
});
  1. 如果有不是字符串的选项,比如true或false
$exitCode = Artisan::call('migrate:refresh', [
'--force' => true,
]);
  1. 其它命令调用命令

从现有的 Artisan 命令中调用其它命令。你可以使用 call 方法

public function handle()
{
$this->call('email:send', [
'user' => 1, '--queue' => 'default'
]); //
}

如果要调用另一个控制台命令并阻止其所有输出,可以使用 callSilent 方法。

$this->callSilent('email:send', [
'user' => 1, '--queue' => 'default'
]);

laravel5.5artisan命令的更多相关文章

  1. Laravel5 (cli)命令行执行脚本及定时任务

    Artisan是Laravel自带的命令行接口名称,它提供了很多有用的命令想要查看所有可用的Artisan命令,可使用list命令查看: 1 php artisan list 每个命令都可以用help ...

  2. Laravel5.0学习--03 Artisan命令

    本文以laravel5.0.22为例. 简介 Artisan 是 Laravel 内置的命令行接口.它提供了一些有用的命令协助您开发,它是由强大的 Symfony Console 组件所驱动.利用它, ...

  3. 安装laravel5.1项目命令

    作为程序员还有什么比命令行执行效率还要快的呢,哈哈... composer create-project laravel/laravel your-project-name --prefer-dist ...

  4. laravel5.5通过Migrations修改表 的artisan命令

    1,不同表的修改都需要通过命令创建一个文件 2,首先通过artisan创建对应表的一个文件 php artisan make:module:migration abtinvitcard(模块名) al ...

  5. Laravel5.5执行表迁移命令出现表为空的解决方案

    今天在使用一个第三方包 laravel-admin 时,出现了这样的错误:SQLSTATE[42000]: Syntax error or access violation: 1103 Incorre ...

  6. laravel5.1学习(2)-- artisan tinker命令

    例如:为users表创建20条测试输入 G:\wamp\www\hcmf>php artisan tinker >>> namespace App; => null &g ...

  7. laravel5.8笔记三:常用命令

    创建控制器 php artisan make:controller Index/IndexController 创建模型 php artisan make:model Index/IndexContr ...

  8. 【laravel5.4】php artisan 常用命令

        路由缓存:/www/wd***/php/bin/php artisan route:cache 查看全部路由并输出到txt文件:/www/wd***/php/bin/php artisan r ...

  9. laravel5 数据库配置(MySQL)

    laravel5 数据库配置(MySQL) 首先有一个安装完成可以运行的laravel框架. 配置database.php 进入laravel根目录. 在config目录下找到database.php ...

随机推荐

  1. matplotlib安装指南

    matplotlib安装指南1.介绍NumPy地址 http://www.numpy.org/NumPy:一个Python一个扩展库,支持大量的维度数组和举证运算,对数组提供大量的函数库 SciPy地 ...

  2. Linux文件种类与扩展名

    一.文件种类 1)普通文件:ls -al第一个字符为[-]的 纯文本文件(ASCII) 二进制文件(binary):Linux中的可执行文件 数据格式文件(data):特定格式的文件,如:Linux登 ...

  3. 03、IDEA下Spark API编程

    03.IDEA下Spark API编程 3.1 编程实现Word Count 3.1.1 创建Scala模块 3.1.2 添加maven支持,并引入spark依赖 <?xml version=& ...

  4. sql:表中数据全部删除之后,重新插入时,从1开始增加

    数据库中设置了自增列,有时候需要清楚数据库从新录入数据.最常见的做法就是使用sql语句"delete 表明名"或是直接选中数据,然后删除数据.但是再次插入数据的时候,你就会发现自增 ...

  5. 【Tim Sweeney】Why C++ for Unreal 4?

    The first three generations of the Unreal Engine included a sandboxed scripting language, UnrealScri ...

  6. 【js基础修炼之路】--创建文档碎片document.createDocumentFragment()

          讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么.         在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面就会更新并反映出这个变化,对于 ...

  7. Javascript作业—数组去重(要求:原型链上添加函数)

    数组去重(要求:原型链上添加函数) <script> //数组去重,要求:在原型链上添加函数 //存储不重复的--仅循环一次 if(!Array.prototype.unique1){ A ...

  8. DP上课覆盖知识点,POJ(1513)

    题目链接:http://poj.org/problem?id=1513 解题报告: 思路: 知识点从第二个开始扫,递推表达式是:minlec[i]=min(minlec[k])+1,并且要保证,tim ...

  9. apache日志

    <VirtualHost *:80> ServerAdmin chinasir.xyz@gmail.com DocumentRoot /var/www/html/baidu ServerN ...

  10. 转:mysql远程连接 Host * is not allowed to connect to this MySQL server

    在本机登入mysql后,更改"mysql"数据库里的"user"表里的"host"项,从"localhost"改为'%' ...