跳转到主要内容

前言

在本教程中,我们将使用 revolution/laravel-console-starter 构建一个包含自定义 artisan 命令的 Laravel 应用。 使用这个 starter kit 的好处:
  • 快速搭建 —— 无需复杂配置,就能立即开始开发控制台应用
  • Laravel 生态 —— 可以直接使用任务调度、数据库、通知等 Laravel 丰富的功能
  • Artisan 命令 —— 借助 Laravel 强大的 Artisan 系统,轻松创建和管理自定义命令
  • 易于测试 —— 可以用 Laravel 的测试框架为命令编写测试

前置条件

请先安装以下软件。

项目搭建

1

创建新项目

在终端中执行以下命令。
这会创建 my-app 目录,并搭建好控制台应用的基础结构。安装时会自动完成:
  • .env.example 生成 .env 文件
  • 执行 php artisan key:generate 设置应用密钥
主要目录结构:
2

确认环境配置

默认情况下,邮件发送被配置为日志输出(MAIL_MAILER=log)。如果需要真正发送邮件,请在 .env 中配置 Mailgun、Postmark、SES 等服务。

创建控制台命令

1

生成命令

通过 make:command Artisan 命令创建新命令。
  • YourCommandName —— 要创建的命令类名(例如:SendDailyReport
  • your:command —— 命令的调用名(例如:report:send-daily
会生成 app/Console/Commands/YourCommandName.php
2

实现命令

编辑生成的文件来实现逻辑。下面是一个 Hello World 命令的示例。
$signature 中定义命令的调用名,在 handle() 方法中编写逻辑。
3

执行命令

执行后,storage/logs/laravel.log 和控制台都会输出对应消息。

用 GitHub Actions 做任务调度

借助 GitHub Actions,不用服务器上的 cron 任务,也能定期执行命令。
1

查看 workflow 文件

Starter kit 中已预置了 .github/workflows/cron.yml
2

替换为自己的命令

php artisan inspire 替换为你自己的命令。
要执行多个命令:
3

调整调度频率

修改 cron 表达式来控制执行频率。
4

用 secrets 管理机密信息

API key、密码等敏感信息请使用 GitHub 仓库的 secrets 来管理。在 GitHub 仓库的 Settings > Secrets and variables > Actions 中添加 secrets,并在 workflow 中引用。

通知功能

你可以通过邮件、Slack 等通道通知命令的执行结果或错误。
1

创建通知类

会生成 app/Notifications/TaskCompleted.php
2

配置通知通道

按需发布配置文件。
3

从命令中发送通知

详情请参考 Laravel 通知文档

实用应用示例

示例 1:网站健康监控与 Slack 报警

一个用来检查网站是否在线、在检测到问题时向 Slack 发送报警的命令。
1

安装 Slack 通知通道

2

创建命令和通知类

3

配置 Slack

.env 中添加 Slack webhook URL。
更新 config/services.php
4

实现通知

编辑 app/Notifications/WebsiteDown.php
5

实现命令

编辑 app/Console/Commands/MonitorWebsites.php
6

在 GitHub Actions 中调度

更新 .github/workflows/cron.yml

示例 2:加密资产组合更新与 Discord 通知

一个用来从 CoinGecko API 获取加密资产价格、并通过 Discord webhook 推送更新的命令。
1

安装 Discord 通知通道

2

创建命令与通知

3

配置 Discord

.env 中添加 Discord webhook URL。
更新 config/services.php
4

实现命令并执行

详细实现请参考 GitHub 仓库中的教程

示例 3:网站内容爬取与邮件通知

从网站爬取内容并通过邮件发送结果的命令。
1

创建命令与通知

2

配置邮件

.env 中添加邮件配置。
3

实现命令并执行

后续步骤

至此,你已经掌握了使用 revolution/laravel-console-starter 构建 Laravel 控制台应用的基础。 若想进一步深入:
  • 探索 Laravel 文档 —— 在 Laravel 官方文档 中查找能强化控制台应用的功能
  • 实现测试 —— 使用 Laravel 的测试框架为命令编写测试,提高可靠性
  • 考虑做成扩展包 —— 如果你要在多个项目中重用类似命令,可以考虑发布为可复用的 Laravel 包
  • 保持信息更新 —— 关注 Laravel News 和官方博客,及时掌握最佳实践
最后修改于 2026年7月18日