如何编写Laravel Artisan脚本来自定义命令?
- 内容介绍
- 文章标签
- 相关推荐
本文共计972个文字,预计阅读时间需要4分钟。
使用以下命令直接生成命令类:
常见错误:手写类但忘了在 Kernel.php 中注册,或用了旧版 Laravel 却没开自动发现,结果 php artisan list 根本看不到命令。
- 命令名建议用短横线分隔,比如
sync:user-data,别用下划线或驼峰 - 类名必须以
Command结尾(如SyncUserDataCommand),否则自动发现会跳过 - Laravel 8+ 默认启用命令自动发现,只要类继承
Illuminate\Console\Command且放在app/Console/Commands/下即可
如何在命令里安全读取参数和选项
signature 属性是核心——它不只是“长得好看”,而是决定了参数解析逻辑、帮助文本生成、甚至影响 php artisan tinker 里的补全行为。
容易踩的坑:把必需参数写成可选(比如写成 {user?} 却没在 handle() 里做空值判断),或者混淆 --force(布尔选项)和 --timeout=30(带值选项)的写法。
本文共计972个文字,预计阅读时间需要4分钟。
使用以下命令直接生成命令类:
常见错误:手写类但忘了在 Kernel.php 中注册,或用了旧版 Laravel 却没开自动发现,结果 php artisan list 根本看不到命令。
- 命令名建议用短横线分隔,比如
sync:user-data,别用下划线或驼峰 - 类名必须以
Command结尾(如SyncUserDataCommand),否则自动发现会跳过 - Laravel 8+ 默认启用命令自动发现,只要类继承
Illuminate\Console\Command且放在app/Console/Commands/下即可
如何在命令里安全读取参数和选项
signature 属性是核心——它不只是“长得好看”,而是决定了参数解析逻辑、帮助文本生成、甚至影响 php artisan tinker 里的补全行为。
容易踩的坑:把必需参数写成可选(比如写成 {user?} 却没在 handle() 里做空值判断),或者混淆 --force(布尔选项)和 --timeout=30(带值选项)的写法。

