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该如何做?  如何彻底卸载建站之星软件?