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


相关推荐: 高性价比服务器租赁——企业级配置与24小时运维服务  中山网站制作网页,中山新生登记系统登记流程?  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何用虚拟主机快速搭建网站?详细步骤解析  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何使用Service Container和依赖注入?(代码示例)  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  Laravel如何使用Telescope进行调试?(安装和使用教程)  Android自定义控件实现温度旋转按钮效果  如何快速配置高效服务器建站软件?  魔方云NAT建站如何实现端口转发?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在阿里云虚拟服务器快速搭建网站?  JS中对数组元素进行增删改移的方法总结  详解Android——蓝牙技术 带你实现终端间数据传输  详解Android图表 MPAndroidChart折线图  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  微信公众帐号开发教程之图文消息全攻略  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel中的Facade(门面)到底是什么原理  制作电商网页,电商供应链怎么做?  linux top下的 minerd 木马清除方法  高端建站如何打造兼具美学与转化的品牌官网?  制作公司内部网站有哪些,内网如何建网站?  如何快速启动建站代理加盟业务?  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel如何生成URL和重定向?(路由助手函数)  重庆市网站制作公司,重庆招聘网站哪个好?  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  大学网站设计制作软件有哪些,如何将网站制作成自己app?  PythonWeb开发入门教程_Flask快速构建Web应用  手机软键盘弹出时影响布局的解决方法  Python结构化数据采集_字段抽取解析【教程】  在centOS 7安装mysql 5.7的详细教程  Laravel怎么为数据库表字段添加索引以优化查询  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel如何使用Vite进行前端资源打包?(配置示例)