Laravel入门与实战示例代码----Artisan入门

示例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', '[email protected]'],
    ['Moses', '[email protected]']
];

// $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
    ]);
}

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/81015501