引言

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

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

代码时间

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

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

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

namespace AppConsoleCommands;
use IlluminateConsoleCommand;

然后是类的内容:

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 = [AppConsoleCommandsWelcomeNewUsers::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 :-)

我是@程序员小助手,持续分享编程知识,欢迎关注。

laravel artisan 后台运行_3分钟短文:Laravel用户自定义命令行简明教程相关推荐

  1. mvc 前段定义变量_3分钟短文 | Laravel blade模板里优雅地定义PHP变量

    引言 Laravel秉持MVC的设计理念,在V = view 中放置视图相关的内容.特别是 blade 模板引擎带来了很强大的解析方式. 与传统的PHP与HTML写作一团方式不容,Blade 使用特定 ...

  2. laravel $request 多维数组取值_3分钟短文 | Laravel 内3种数据校验的写法,你喜欢哪一个?...

    引言 web应用程序公开访问几乎没有不带用户交互的,难免要接收用户输入的奇奇怪怪的东西.对于后端程序,必须对输入的内容进行有效性过滤. 这就是本文的重点,说一说laravel中输入请求的校验. 学习时 ...

  3. sql查询无结果返回空_3分钟短文 | Laravel 查询结果检查是不是空,5个方法你别用错...

    引言 Laravel 提供了 Eloquent ORM 对象用于操作数据库,将其进行抽象方便操作. 因为设计的灵活度,大家在使用Model查询数据集的时候,会面临结果为空,记录不存在的问题, 那么如何 ...

  4. 语句作用_3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向. laravel模型为我们提供了一层数据库操作层,将数据交互独立出来. 但是久而久之,随着项目的需 ...

  5. 想让进程后台运行,试试Linux的nohup命令,3分钟学会。

    作者 | 恋猫大鲤鱼 来源 | https://dablelv.blog.csdn.net/article/details/79985071 1.命令简介 nohup 的作用可以将程序以忽略挂起信号( ...

  6. php 时间格式化_3分钟短文 | PHP获取函数的代码片段,唯有反射最高效

    引言 为了演示上一篇我们所说的PHP中反射的应用,本篇接着讲反射的应用.因为其特性,是操作函数和方法的,是函数的操作者,类的操作者,所以显得格外重要. 我们从一个小需求出发,假如有一段这样的代码: f ...

  7. java swing运行没反应_java – 无法从命令行运行swing

    我在 windows中使用命令行来编译然后执行我的 java程序.我已经去了 http://java.sun.com/docs/books/tutorial/uiswing/start/compile ...

  8. VS运行C语言代码,cmd命令行窗口一闪而过

    在vs2013里面运行写好代码,运行的窗口一闪而过 常见解决方法有两种 方法一: 修改当前项目配置 鼠标右键单击当前项目,在弹出窗口中选中"属性" 再在VS中使用 ctrl + F ...

  9. request用法_3分钟短文:说说Laravel页面会话之间的数据保存Session用法

    引言 我们知HTTP请求是没有状态的,两个请求之间没有直接的关联关系.但大多数情况下, 我们需要保持用户的会话间数据的连续性,这时,为了数据安全起见, 有必要在服务器上临时存储一些上下文数据了. 这就 ...

最新文章

  1. python小工具封装_python接口自动化(二)——封装需要用到的工具类
  2. spock_将Spock 1.3测试迁移到Spock 2.0
  3. 送你一份 Nginx 最佳入门手册
  4. Socket SSL通讯
  5. 【DP】[ZJOI2008][HYSBZ/BZOJ1037]生日聚会Party
  6. “非”天才女程序员的人生
  7. 多层感知机 深度神经网络_使用深度神经网络和合同感知损失的能源产量预测...
  8. Flink 集群搭建安装 CentOS 7.x 版本
  9. VBA读取word中的内容到Excel中
  10. C# DES 加解密
  11. rails logger 和 session, cookies, request方面的笔记
  12. 移动招聘笔试计算机类,2017中国移动校园招聘考试备考资料―计算机类习题三...
  13. 3D游戏引擎技术剖析
  14. 简单谈谈自己对前端的感想
  15. 传感器相关 MPU9250
  16. Python3 插入排序
  17. ie主页被劫持怎么办 解决浏览器主页劫持方法
  18. MIUI12 for OnePlus 7T 使用钱包app 的尝试
  19. python导出结果_Python连接Oracle数据查询导出结果
  20. 【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口

热门文章

  1. 2440,6410,210存储器接口比较
  2. windows nt service 框架
  3. JDK自带VM分析工具jps,jstat,jmap,jconsole
  4. java中的strictfp的作用
  5. Oracle Purge和drop的区别
  6. react native 生成APK
  7. OpenCV Cut Image via ROI 根据兴趣区域剪裁图片
  8. 《妥协的完美主义—优秀产品经理的实践指南(卷一)》一2.4 分工常见的错误...
  9. 【规范】前端编码规范——css 规范
  10. IOS 中runtime 不可变数组__NSArray0 和__NSArrayI