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


相关推荐: 详解jQuery停止动画——stop()方法的使用  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  动图在线制作网站有哪些,滑动动图图集怎么做?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  高端云建站费用究竟需要多少预算?  如何在宝塔面板中创建新站点?  Laravel如何使用Gate和Policy进行授权?(权限控制)  网站制作价目表怎么做,珍爱网婚介费用多少?  JavaScript模板引擎Template.js使用详解  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  如何在 Pandas 中基于一列条件计算另一列的分组均值  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  JS经典正则表达式笔试题汇总  Laravel如何使用Livewire构建动态组件?(入门代码)  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel如何实现用户注册和登录?(Auth脚手架指南)  iOS UIView常见属性方法小结  南京网站制作费用,南京远驱官方网站?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel如何使用Eloquent进行子查询  如何正确下载安装西数主机建站助手?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel模型事件有哪些_Laravel Model Event生命周期详解  怎么用AI帮你为初创公司进行市场定位分析?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  ,交易猫的商品怎么发布到网站上去?  Laravel怎么判断请求类型_Laravel Request isMethod用法  Laravel如何使用模型观察者?(Observer代码示例)  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何快速配置高效服务器建站软件?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel怎么连接多个数据库_Laravel多数据库连接配置  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何快速生成ASP一键建站模板并优化安全性?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?