本文讲述了如何使用 Laravel 开发命令行
环境 
PHP 7 
Laravel 5.1 
OS X El Capitan 10.11.4 
 
简介 
Artisan 是 Laravel 的命令行接口的名称,它提供了许多实用的命令来帮助你开发 Laravel 应用,它由强大的 Symfony Console 组件所驱动。
文档 
Artisan 
目的 
本文目的旨在实现三个简单的命令,分别是优化项目、清除缓存和发送邮件
实现步骤 
新建命令 
1 2 3 php artisan make:console LaravelOptimize --command=laravel:optimize php artisan make:console LaravelClean --command=laravel:clean php artisan make:console SendEmails --command=emails:send 
 
注册命令 
打开文件 app/Console/Kernel.php,修改代码如下:
1 2 3 4 5 6 protected $commands = [     \App\Console\Commands\Inspire::class,     \App\Console\Commands\SendEmails::class,     \App\Console\Commands\LaravelClean::class,     \App\Console\Commands\LaravelOptimize::class, ]; 
 
编写命令执行代码 
文件 SendEmails.php 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 <?php namespace App\Console\Commands; use App\Facades\UserRepository; use Illuminate\Console\Command; use Mail; class SendEmails extends Command {     /**      * The name and signature of the console command.      *      * @var string      */     protected $signature = 'emails:send';     /**      * The console command description.      *      * @var string      */     protected $description = 'use SendCloud to send emails';     /**      * Create a new command instance.      *      * @return void      */     public function __construct()     {         parent::__construct();     }     /**      * Execute the console command.      *      * @return mixed      */     public function handle()     {         $this->line("即将执行邮件发送命令");         if($this->confirm('确定执行?')){             $users = UserRepository::all();             $bar = $this->output->createProgressBar(count($users));             foreach ($users as $user) {                 $icon = "http://o93kt6djh.bkt.clouddn.com/Laravel-SendEmaillaravel-200x50.png";                 $image = "http://o93kt6djh.bkt.clouddn.com/Laravel-SendEmaillaravel-600x300.jpg";                 Mail::send('emails.test-image',                     [                         'name'  => $user->name,                         'icon'  => $icon,                         'image' => $image,                     ],                     function ($email) use ($user) {                         $email->to($user->email)->subject('图文邮件标题');                     });                 $bar->advance();             }             $bar->finish();             $this->info("发送邮件完毕");         } else {             $this->info("取消执行邮件发送命令");         }     } } 
 
文件 LaravelOptimize.php 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 <?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Artisan; class LaravelOptimize extends Command {     /**      * The name and signature of the console command.      *      * @var string      */     protected $signature = 'laravel:optimize';     /**      * The console command description.      *      * @var string      */     protected $description = 'optimize laravel project';     /**      * Create a new command instance.      *      * @return void      */     public function __construct()     {         parent::__construct();     }     /**      * Execute the console command.      *      * @return mixed      */     public function handle()     {         $this->line("即将执行优化缓存命令");         if($this->confirm('确定执行?')){             $this->line("开始执行缓存命令");             Artisan::call("config:cache");             $this->info('Configuration cache cleared!');             $this->info('Configuration cached successfully!');             Artisan::call("route:cache");             $this->info('Route cache cleared!');             $this->info('Routes cached successfully!');             Artisan::call("optimize");             $this->info('Generating optimized class loader');             if(function_exists('exec')){                 exec("composer dump-autoload");             }             Artisan::call("ide-helper:generate");             $this->info('A new helper file was written to _ide_helper.php');             $this->info("优化缓存成功");         } else {             $this->info("取消执行优化缓存命令");         }     } } 
 
文件 LaravelClean.php 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 <?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Artisan; class LaravelClean extends Command {     /**      * The name and signature of the console command.      *      * @var string      */     protected $signature = 'laravel:clean';     /**      * The console command description.      *      * @var string      */     protected $description = 'clean project all cache';     /**      * Create a new command instance.      *      * @return void      */     public function __construct()     {         parent::__construct();     }     /**      * Execute the console command.      *      * @return mixed      */     public function handle()     {         $this->line("即将执行清除缓存命令");         if($this->confirm('确定执行?')){             $this->line("开始执行缓存命令");             Artisan::call("clear-compiled");             Artisan::call("auth:clear-resets");             $this->info('Expired reset tokens cleared!');             Artisan::call("cache:clear");             $this->info('Application cache cleared!');             Artisan::call("config:clear");             $this->info('Configuration cache cleared!');             Artisan::call("debugbar:clear");             $this->info('Debugbar Storage cleared!');             Artisan::call("route:clear");             $this->info('Route cache cleared!');             Artisan::call("view:clear");             $this->info('Compiled views cleared!');             $this->info("清除缓存成功");         } else {             $this->info("取消执行清除缓存命令");         }     } } 
 
执行效果 
在终端分别执行以下代码:
1 2 3 php artisan laravel:optimize php artisan laravel:clean php artisan emails:send 
 
执行效果分别如下显示:
php artisan laravel:optimize 
php artisan laravel:clean 
php artisan emails:send