Laravel如何创建自定义Artisan命令?(代码示例)
发布时间 - 2025-12-25 00:00:00 点击率:次在 Laravel 中创建自定义 Artisan 命令需运行 php artisan make:command SendNewsletter 生成类,修改 $signature 和 $description 定义命令签名与描述,于 handle() 方法中用 $this->argument() 和 $this->option() 获取参数与选项,并使用 $this->info() 等方法输出提示,返回 0 表示成功。
在 Laravel 中创建自定义 Artisan 命令
非常简单,核心是使用 make:command 命令生成类,然后在 handle() 方法中编写逻辑。
生成命令类
运行以下 Artisan 命令,Laravel 会自动生成一个带命名空间的命令类(位于 app/Console/Commands/):
php artisan make:command SendNewsletter
生成的类默认包含 signature(命令名和参数定义)和 handle()(执行逻辑)两个关键属性/方法。
定义命令签名与描述
在生成的 SendNewsletter.php 中,修改 $signature 和 $description:
protected $signature = 'newsletter:send {--force : 是否强制发送} {email? : 接收者邮箱}';
protected $description = '发送订阅邮件';
-
{email?}表示可选参数(末尾加?) -
{--force}是布尔型选项,运行时用--force启用 - 签名支持更复杂的格式,如
{email : 邮箱地址} {--limit=100 : 最大发送数量}
编写执行逻辑(handle 方法)
在 handle() 中写业务代码,并善用 Artisan 提供的辅助方法:
public function handle()
{
$email = $this->argument('email');
$force = $this->option('force');
if (!$email && !$force) {
$this->error('请提供 email 或使用 --force');
return 1;
}
// 模拟发送
$this->info("正在向 {$email} 发送邮件...");
// Mail::to($email)->send(new NewsletterMail());
$this->line('✅ 邮件已排队发送');
return 0;
}
- 用
$this->argument('xxx')获取参数值 - 用
$this->option('xxx')获取选项值 -
$this->info()、$this->error()、$this->warn()等输出带颜色提示 - 返回
0表示成功,非0表示失败(可用于 shell 脚本判断)
注册并运行命令
新命令默认已自动注册(Laravel 8+ 使用命令自动发现),无需手动添加到 app/Console/Kernel.php 的 $commands 数组。确认注册可用:
php artisan list | grep newsletter
运行命令示例:
php artisan newsletter:send test@example.com php artisan newsletter:send --force php artisan newsletter:send --force --env=production
基本上就这些。不复杂但容易忽略的是:签名语法要写对、参数取值要用对应方法、退出码别忘了设 —— 这些细节决定了命令是否健壮好用。
# php
# laravel
# app
# ai
# 邮箱
# 命名空间
# Error
# 布尔型
# console
# this
# 自定义
# 的是
# 要用
# 布尔
# 可选
# 别忘了
# 好用
# 时用
# 自动生成
# 发送邮件
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
个人摄影网站制作流程,摄影爱好者都去什么网站?
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel怎么实现模型属性的自动加密
Java遍历集合的三种方式
如何用搬瓦工VPS快速搭建个人网站?
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
如何快速查询网站的真实建站时间?
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Bootstrap整体框架之CSS12栅格系统
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在万网开始建站?分步指南解析
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel如何实现数据库事务?(DB Facade示例)
如何获取免费开源的自助建站系统源码?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
WordPress 子目录安装中正确处理脚本路径的完整指南
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Python结构化数据采集_字段抽取解析【教程】
Python制作简易注册登录系统
如何在阿里云服务器自主搭建网站?
如何正确选择百度移动适配建站域名?
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Bootstrap CSS布局之列表
教你用AI润色文章,让你的文字表达更专业
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel storage目录权限问题_Laravel文件写入权限设置
node.js报错:Cannot find module 'ejs'的解决办法
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何实现用户密码重置功能?(完整流程代码)
Python文本处理实践_日志清洗解析【指导】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何快速使用云服务器搭建个人网站?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何在IIS中新建站点并解决端口绑定冲突?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel怎么清理缓存_Laravel optimize clear命令详解
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
打造顶配客厅影院,这份100寸电视推荐名单请查收
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何彻底卸载建站之星软件?

