在 laravel 中生成自定义 artisan 命令需四步:1. 用 php artisan make:command 创建命令类;2. 在 $signature 和 $description 中配置签名与描述;3. 在 handle() 中编写逻辑并注入服务;4. 通过 php artisan list 和 php artisan 命令测试运行。

在 Laravel 中生成自定义 Artisan 命令非常简单,核心是使用内置的 make:command 命令创建命令类,再在其中编写逻辑。
1. 创建自定义命令类
运行以下 Artisan 命令生成一个新的命令类(例如叫 SendNewsletter):
php artisan make:command SendNewsletter
这会在 app/Console/Commands/ 目录下生成一个 PHP 类文件,Laravel 会自动注册它(无需手动添加到 Kernel.php,只要类继承 Command 并有 $signature 属性即可)。
2. 配置命令签名与描述
打开刚生成的类,在 $signature 和 $description 属性中定义命令行为:
-
$signature:指定命令名称、参数和选项,支持参数(
{name})、可选参数({name?})、选项(--force)、带值选项(--limit=10) -
$description:简短说明,会在
php artisan list或php artisan help xxx中显示
示例:
$signature = 'newsletter:send {--force : 强制发送} {--limit=100 : 最多发送数量}';
$description = '批量发送邮件简报';
3. 编写执行逻辑
在 handle() 方法中写实际业务代码。你可以依赖注入任何服务(如 Mail、DB、自定义 Repository 等):
- 用
$this->option('force')获取选项值 - 用
$this->argument('name')获取参数值(如果定义了) - 用
$this->info()、$this->warn()、$this->error()输出友好提示 - 返回
0表示成功,非0表示失败(会触发 shell 错误码)
小技巧:可在 handle() 中调用其他 Service 类或 Eloquent 模型,保持逻辑清晰。
4. 测试与运行
保存后,直接运行命令查看是否注册成功:
php artisan list | grep newsletter
执行命令:
php artisan newsletter:send --force --limit=50
开发阶段建议加 --dry-run 选项模拟执行,避免误操作;上线前可用 if ($this->confirm('确认执行?')) { ... } 加交互确认。











