Laravel自定义Artisan命令需手动校验参数:在handle()中用argument()/option()获取值,检查空值与格式,抛异常或error()退出;复杂校验可用Validator;signature可声明必填/默认值提升可用性。

在 Laravel 中,自定义 Artisan 命令的参数校验不能直接依赖框架自动完成,需手动在 handle() 方法中处理。核心思路是:获取输入值 → 判断是否为空或不符合规则 → 抛出异常或提前退出。
使用 $this->argument() 和 $this->option() 获取值
Artisan 命令中,参数(arguments)和选项(options)分别通过 $this->argument('name') 和 $this->option('name') 获取。注意它们返回的是原始字符串或 null,不自动过滤或验证。
- 位置参数(如
php artisan user:delete {id})用argument() - 可选参数(如
--force或--role=admin)用option() - 若参数未提供且未设默认值,
argument()返回null,option()返回false或null
手动校验必填参数与格式
在 handle() 开头做校验最清晰。例如要求 {email} 必填且为合法邮箱:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
- 检查是否为空:
if (empty($this->argument('email'))) { ... } - 验证格式:
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { ... } - 抛出带提示的异常:
throw new \InvalidArgumentException('邮箱格式不正确'); - 也可用
$this->error('错误信息')+return 1;优雅退出
结合 Laravel 的验证器(适合复杂规则)
对于多字段、存在性、长度等复合校验,可复用 Validator:
- 构造数据数组,如
['email' => $email, 'role' => $role] - 调用
Validator::make(...)->validate(),失败时自动抛出ValidationException - 或手动检查:
if ($validator->fails()) { $this->error($validator->errors()->first()); return 1; }
利用 signature 提前约束基础规则
虽不能替代逻辑校验,但可在命令签名中声明必填、默认值或描述,提升可用性:
protected $signature = 'user:import {file? : CSV 文件路径} {--format=json : 导入格式}';-
{file?}表示可选;{file}表示必填;{file=default.csv}设默认值 - 帮助信息会自动显示,用户执行
php artisan help user:import即可见
不复杂但容易忽略:校验要尽早、提示要明确、退出码要合理(非零表示失败),这样命令才健壮易用。

















