'validation.schedule_command.artisan_denied', ScheduleCommandValidator::ARTISAN_REASON_NOT_ALLOWED => 'validation.schedule_command.artisan_not_allowlisted', ScheduleCommandValidator::ARTISAN_REASON_MALFORMED => 'validation.schedule_command.artisan_malformed', ScheduleCommandValidator::ARTISAN_REASON_OPTION => 'validation.schedule_command.artisan_option_denied', ScheduleCommandValidator::ARTISAN_REASON_ARGUMENT => 'validation.schedule_command.artisan_argument_denied', ]; /** * 값이 실행 허용된 artisan 명령인지 검증합니다. * * @param string $attribute 검증 대상 필드명 * @param mixed $value 검증 대상 값 * @param Closure $fail 실패 콜백 */ public function validate(string $attribute, mixed $value, Closure $fail): void { if ($value === null || $value === '') { return; } if (! is_string($value)) { $fail(__('validation.schedule_command.artisan_malformed')); return; } $verdict = ScheduleCommandValidator::inspectArtisanCommand($value); if ($verdict['allowed']) { return; } $key = self::REASON_MESSAGES[$verdict['reason']] ?? 'validation.schedule_command.artisan_not_allowlisted'; $fail(__($key)); } }