前言
在本教程中,我们将使用revolution/laravel-console-starter 构建一个包含自定义 artisan 命令的 Laravel 应用。
使用这个 starter kit 的好处:
- 快速搭建 —— 无需复杂配置,就能立即开始开发控制台应用
- Laravel 生态 —— 可以直接使用任务调度、数据库、通知等 Laravel 丰富的功能
- Artisan 命令 —— 借助 Laravel 强大的 Artisan 系统,轻松创建和管理自定义命令
- 易于测试 —— 可以用 Laravel 的测试框架为命令编写测试
前置条件
请先安装以下软件。- PHP
^8.3 - Composer(https://getcomposer.org/)
- Laravel Installer(
composer global require laravel/installer)
项目搭建
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 和官方博客,及时掌握最佳实践