3分钟短文:Laravel写个命令行,你就是下一个Geek
引言习惯了在windows下敲敲点点的同学 , 习惯了没有窗口视图就无从下手的同学 , 来到linux第一个面临的问题就是 , core发行版根本不提供gui , 太费空间 , 太费资源 , 要啥窗口? 所以电影里看到很多懂的 , 不懂的 , 懂的装不懂的 , 不懂的装懂的那么演员们 , 都在奋力敲击键盘 , 一串串荧幕输出像火箭似的飞速狂奔 。 这大概只有拷贝文件 , 或者debug时才能有的盛举吧 。
文章插图
没错儿 , 在linux下 , 你是PC小白也好 , 是行业大神也罢 , 都得敲那么两下子 , 这叫——“专业” 。本文给那些想写个命令行程序 , 体验一把geek范的同学一次机会 , 教你3分钟内迅速跻身geek之列 。
代码时间使用脚手架指令生成一个命令行类:
php artisan make:console WelcomeNewUsers --command=email:newusers该指令在 app/Console/Commands/ 文件夹下生成一个 WelcomeNewUsers.php 的类 , 因为使用了 --command 选项 , 所以类内指定了命令调用的名字 。
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(){//}}这就是文件的原始内容 , 我们需要实现的逻辑 , 可以在 handle 方法内任意书写了 。 这是实现代码逻辑的地方 , 我们先把整个流程的架子搭完 , 然后再细化代码 。 下面该注册这个命令了 , 在文件 app/Console/Kernel.php 文件内添加下面的配置项:
protected $commands = [\App\Console\Commands\WelcomeNewUsers::class,];新建的命令行类必须在此引入才能够被 Artisan 正确地调用 。
为什么不用一个 hello world 的示例呢 , 直接打印出来不是更简单?当然可以 , 下面就是在命令行打印 hello world 字符串:
【3分钟短文:Laravel写个命令行,你就是下一个Geek】public function handle(){$this->output->info('hello world');}编辑完毕 , 保存文件后 , 打开命令行 , 并进入到项目的根目录 , 执行下面的指令:
php artisan email:newusers如无意外 , 命令行上就会打印出绿色字体的 hello world了 。
演示命令太过简单了 , 注意我们创建此命令类的初衷 , 是给新用户发一封电子邮件 , 欢迎他们的注册 。 所以下面给 WelcomeNewUsers 类的 handle 方法实现一些代码 ,
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!');});});}这个处理方法有些复杂 , 我一项一项讲给你听 。
第一项 , User 类是一个模型类 , 用于操作users表的数据 。 其中 signedUpThisWeek() 方法是我们手动注册的 本地作用域 , 也就是说在 User 类内有一个本地作用域的方法 , 代码如下:
public function scopeSignedUpThisWeek($query){return $query->where('created_at', '>', Carbon::now()->subWeek());}筛选出所有创建时间在本周的用户 。 该方法继承了 Model 类 , 返回的的是一个 Eloquent Collection , 所以直接使用集合的 each 方法用于遍历查询后的集合内的对象 。 遍历方法内是邮件发送的所有逻辑 , 这个我们会在后面的邮件和通知章节中专门讲述 。
书写完毕后在命令行内使用
php artisan email:newusers就会执行用户查询和邮件发送的流程 。
写在最后本文我们使用了Laravel的 Command 类创建了一个简单的示例代码 , 并手动实现了一个相对复杂的模型查询和邮件发送类 。 想要实现这个功能还有很多工作要做 , 包括数据库的配置 , 服务器配置等等 。 所以 , 大家不必着急 , 慢慢我们都要讲到 。
Happy coding :-)
我是@程序员小助手 , 专注编程知识 , 圈子动态的IT领域原创作者
- 总价值|3分钟售罄总价值117亿的17919台挖掘机 梁稳根押宝智能化成功“翻身”
- 电视|3分钟即告售罄 OPPO电视能走出“围城”?
- 手机|如何将手机定位变为别的城市?方法不止一种,3分钟就能学会
- 3分钟短文:任命管理员,给Laravel普通用户提权
- 「国际3分钟」在乌镇,世界看见互联网的未来
- 3分钟短文:Laravel路子真野啊!路由昵称前缀中间件
- 3分钟短文:Laravel跟用户打交道,从拿他们的数据开始
- 即时|专注同城,你需要的即时配送在这里,3分钟带你了解曹操送
- 忘记开机密码?无需u盘,教你3分钟破解Windows密码
- 3分钟短文:Laravel表单验证的“指挥中心”:表单请求类
