本文文档适用于laravel5.2版本,其他版本参考。
artisan 命令查询
php artisan list
artisan 帮助
php artisan help
有没想过自己写一些命令,然后通过artisan执行呢,根据文档,我们来一一操作
创建
php artisan make:console SendEmails
#带命令写入
php artisan make:console SendEmails --command=emails:send
这个时候生成:app\Console\Commands\SendEmails.php文件
解析文件
namespace App\Console\Commands; use Illuminate\Console\Command; class SendEmails extends Command { /** * The name and signature of the console command. *控制台的命令指令,exp:php artisan emails:seed * @var string */ protected $signature = 'emails:send'; /** * The console command description. *描述 * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. *执行命令 * @return mixed */ public function handle() { } }
传值
#必须传值 protected $signature = 'email:send {user}'; php artisan email:send 1(必须有这个,否则报错) #可有可无传值 protected $signature = 'email:send {user?}'; php artisan email:send 1(可有可无) #默认值 protected $signature = 'email:send {user=1024}'; php artisan email:send 1(可有可无)
开关传递
开关:表示一开一关,换成返回未:1/0,true/false
protected $signature = 'email:send {user} {--queue}'; // --queue这个名字可以随便取,避免认为是队列, //如果--queue开关被传递,其值是true,否则其值是false: php artisan email:send 1 --queue
开关分配值
//选项值被用户通过=来分配: protected $signature = 'email:send {user} {--queue=}'; php artisan email:send 1 --queue='on'
选项别名
email:send {user} {--Q|queue}
定义参数和选项以便指定输入数组
这没看懂,不知道在控制台怎么传值
email:send {user*} email:send {user} {--id=*}
获得传值
argument和option
// 获取指定选项... $queueName = $this->option('queue'); // 获取所有选项... $options = $this->option()
输入提示
/** * 执行控制台命令 * * @return mixed */ public function handle(){ $name = $this->ask('What is your name?'); $password = $this->secret('What is the password?');//隐藏 } //用户确认 if ($this->confirm('Do you wish to continue? [y|N]')) { // }
索引选择
$name = $this->choice('What is your name?', ['Taylor', 'Dayle'], false); 选择,0,1,...
输出,反馈信息
line,info, comment, question 和 error方法
//要显示一条错误消息,使用error方法。错误消息文本通常是红色: $this->error('Something went wrong!'); //如果你想要显示原生输出,可以使用line方法,该方法输出的字符不带颜色: $this->line('Display this on the screen'); //表格布局 $headers = ['Name', 'Email']; $users = App\User::all(['name', 'email'])->toArray(); $this->table($headers, $users);
进度条
$users = App\User::all(); $this->output->progressStart(count($users)); foreach ($users as $user) { $this->performTask($user); $this->output->progressAdvance(); } $this->output->progressFinish();
更多查看(http://symfony.com/doc/2.7/components/console/helpers/progressbar.html)
注册命令
app/Console/Kernel.php 把这个文件导入,
protected $commands = [ 'App\Console\Commands\SendEmails' ];`
CLI之外执行Artisan命令
Route::get('/foo', function () { $exitCode = Artisan::call('email:send', [ 'user' => 1, '--queue' => 'default' ]); }); //需要指定不接收字符串的选项值 $exitCode = Artisan::call('migrate:refresh', [ '--force' => true, ]);
使用Artisan上的queue队列
Route::get('/foo', function () { Artisan::queue('email:send', [ 'user' => 1, '--queue' => 'default' ]); });
通过其他命令调用命令
已存在的Artisan命令中调用其它命令
/** * 执行控制台命令 * * @return mixed */ public function handle(){ $this->call('email:send', [ 'user' => 1, '--queue' => 'default' ]); }
调用其它控制台命令并阻止其所有输出
$this->callSilent('email:send', [ 'user' => 1, '--queue' => 'default' ]);
from:https://www.jianshu.com/p/a880a494d122