3分钟短文:Laravel用户自定义命令行简明教程

2022-10-11 20:59:04 174 0
魁首哥

引言

完成一个功能需求,有时候并不需要一个界面UI,比如定时任务,后台任务, 对于这类任务往往比较耗时,在一个web页面生命周期内,要拖的很久。这时候我们 需要将其放在后台交给操作系统执行。

本期说一说laravel中,自建命令行的简要方法。

代码时间

在laravel中命令行被称作Artisan类,你可以很轻松地使用自带的脚手架创建一个命令行文件。 我们使用欢迎新用户这样的一个假设需求做示例:

 php artisan make:console WelcomeNewUsers --command=email:newusers  

这样就会在目录 app/Console/Commands/ 下创建一个 WelcomeNewUsers.php 文件。 我们来看一下这个文件长啥样。首先是头部的命名空间,和类引用:

 namespace App\Console\Commands;
use Illuminate\Console\Command;  

然后是类的内容:

 class WelcomeNewUsers extends Command
{
    protected $signature = 'email:newusers';
    protected $description = 'Command description';

    public function __construct()
    {
        parent::__construct();
    }
    public function handle()
    {
        //
    }
}  

为了演示,我们把注释都给去掉了。其中 $signarute 就是命令行中 –command 所声明的形式。 属性 $description 是命令的描述。

我们的业务逻辑,在 handle() 方法内实现就可以了。

要让这个命令行可以调用,需要手动注册,在 app/Console/Kernel.php 文件的添加如下内容:

 protected $commands = [
    \App\Console\Commands\WelcomeNewUsers::class,
];  

这样就可以在应用根目录下,打开命令行,输入以下命令:

 php artisan email:newusers  

因为没有任何逻辑代码,执行会顺利结束,且没有任何提示信息。 现在我们给 handle 方法内添加一些业务逻辑代码:

 User::signedUpThisWeek()->each(function ($user) {
    Mail::send(
        'emails.welcome',
        ['name' => $user->name],
        function ($m) use ($user) {
            $m->to($user->email)->subject('Welcome!');
        }
    );
});  

注意上面的代码,我们默认省略了一些语法糖。首先是一个User模型的本地作用域,

 public funciton scopeSignedUpThisWeek($query)
{
    return $query->where('signed_at', '>=', Carbon::now()->startOfWeek());
}  

另外还有一个类和方法 Mail::send() 是用于邮件发送的,我们在其他篇幅再做介绍。

经过上面的代码,我们每次调用

 php artisan email:newusers  

的时候,都会把数据库中本周注册的新用户拉取出来,挨个发送email。

写在最后

本文通过演示为新用户发送邮件的需求,使用命令行创建文件, 并在命令行处理方法内书写逻辑代码。为大家演示了laravel命令行最初步的用法。 通常我们在命令行中会有参数传递,也极为常见,下文我们为大家演示。

Happy coding 🙂

收藏
分享
海报
0 条评论
174
上一篇:清炒地瓜叶(爆炒地瓜叶) 下一篇:每天一个PHP语法六数组函数array_keys、reset的使用及实现

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码