3分钟短文:Laravel用户自定义命令行简明教程
引言
完成一个功能需求,有时候并不需要一个界面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 :-)
- velocity模板引擎学习(1)
- mybatis 3.x 缓存Cache的使用
- XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
- mac: vmware fusion中cent os启动假死的解决办法
- java:hibernate + oracle之坑爹的clob
- 启用WCF NetTcpBinding的共享端口
- asp中的md5/sha1/sha256算法收集
- UE4从零搭建CF游戏关卡(蓝图篇)
- 通用的序列号生成器库
- 利用Geneva开发SOA的安全模型
- STOMP协议介绍
- ADO.NET实体框架连接串引发的异常:Unable to load the specified metadata resource
- Mono产品生命周期
- WordPress免插件仅代码实现文章归档模板 II
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- python函数——pickle中的dump以及load
- python函数——Keras分词器Tokenizer
- python函数——序列预处理pad_sequences()序列填充
- MapReduce工作笔记——Streaming多路输出
- nuxt.js项目入门配置篇
- 高级综合工具StratusHLS学习笔记(4)
- 论文笔记&翻译——Enhanced LSTM for Natural Language Inference(ESIM)
- Day 5:用两个栈实现队列
- C++核心准则T.42:使用模板别名简化记法并隐藏实现细节
- Python实战——ESIM 模型搭建(keras版)
- MapReduce工作笔记——Job调度参数设置
- 矩阵操作试题(C++/Python)——矩阵元素逆时针旋转90度(升级版)
- Macdown中[toc]无法生成目录解决方法
- Linux实用技巧——mkdir创建多级新目录
- C++核心准则T.43: 定义别名时,using比typedef更好