示例7-1 Artisan命令的默认架构
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class WelcomeNewUsers extends Command{
/**
*控制台命令名称和签名
*
**@var string
*/
protected $signature = 'email:newusers';
/**
*控制台命令描述
*
**@var string*/
protected $description = 'Command description';
/**
*创建一个新的命令实例
*
*@return void
*/
public function __construct(){
parent::__construct();
}
/**
*执行控制台命令
*
*@return mixed
*/
public function handle(){
//
}
}
示例7-2 在控制台内核中注册新命令
class Kernel extends ConsoleKernel
{
/**
* 应用提供的Artisan命令
*
* @var array
*/
protected $commands = [
\App\Console\Commands\WelcomeNewUsers::class,
];
}
示例7-3 Artisan命令中的handle方法示例
...
class WelcomeNewUsers extends Command{
public function handle(){
User::signedUpThisWeek()->each(function ($User){
Mail::send(
'emails.welcome',
['name' => $user->name],
function ($m)use ($user) {
$m->to($user->email)->subject('Welcome!');
}
);
});
}
}
示例7-4 重构的代码
...
class WelcomeNewUsers extends Command{
public function __construct(UserMailer $userMailer){
parent::__construct();
$this->userMailer = $userMailer;
}
public function handle(){
$this->userMailer->welcomeNewUsers();
}
}
示例7-5 在 Artisan命令中使用数组
//参数
php artisan password:reset 1 2 3
//选项
php artisan password:reset --ids=1 --ids=2 --ids=3
示例7-6 为 Artisan参数和选项定义描述文字
protected $signature = 'password:reset
{useId:The ID of the user}
{--sendEmail:Whether to send user an email}';
示例7-7 在 Artisan命令中获取输入
public function handle(){
$arguments = $this-->argument();
$userid = $this->argument('userId');
$options =$this->option();
$sendEmail = $this->option('sendEmail');
}
示例7-8 在 Artisan命令中输出表
$headers = ['name','email'];
$data = [
['Dhriti', '],
['Moses', ']
];
// $data = App\User::all(['name', 'email'])->toArray();
$this->table($headers, $data);
示例7-10 进度条
$totalUnits =10;
$this->output->progressStart($totalUnits);
for($i=0;$i<$totalUnits;$i++){
sleep(1);
$this->output->progressAdvance();
}
$this->output->progressFinish();
示例7-11 在其他代码中调用 Artisan 命令
Route::get('test-artisan', function(){
$exitCode = Artisan::call('password:reset', [
'userId' => 15, '--sendEmail' =>true
]);
});
示例7-12 在其他命令中调用 Artisan 命令
public function handle(){
$this->callSilent('password:reset',[
'userId' => 15
]);
}