data = $data; } /** * Validate required field */ public function required($field, $message = null) { if (!isset($this->data[$field]) || empty($this->data[$field])) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s الزامی است.', 'sodino'), $field); } return $this; } /** * Validate numeric field */ public function numeric($field, $message = null) { if (isset($this->data[$field]) && !is_numeric($this->data[$field])) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s باید عدد باشد.', 'sodino'), $field); } return $this; } /** * Validate min value */ public function min($field, $min, $message = null) { if (isset($this->data[$field]) && $this->data[$field] < $min) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s باید حداقل %s باشد.', 'sodino'), $field, $min); } return $this; } /** * Validate max value */ public function max($field, $max, $message = null) { if (isset($this->data[$field]) && $this->data[$field] > $max) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s باید حداکثر %s باشد.', 'sodino'), $field, $max); } return $this; } /** * Validate email */ public function email($field, $message = null) { if (isset($this->data[$field]) && !filter_var($this->data[$field], FILTER_VALIDATE_EMAIL)) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s باید یک ایمیل معتبر باشد.', 'sodino'), $field); } return $this; } /** * Validate URL */ public function url($field, $message = null) { if (isset($this->data[$field]) && !filter_var($this->data[$field], FILTER_VALIDATE_URL)) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s باید یک URL معتبر باشد.', 'sodino'), $field); } return $this; } /** * Validate in array */ public function in($field, array $values, $message = null) { if (isset($this->data[$field]) && !in_array($this->data[$field], $values, true)) { $this->errors[$field][] = $message ?? sprintf(__('مقدار فیلد %s نامعتبر است.', 'sodino'), $field); } return $this; } /** * Custom validation */ public function custom($field, callable $callback, $message = null) { if (isset($this->data[$field]) && !call_user_func($callback, $this->data[$field])) { $this->errors[$field][] = $message ?? sprintf(__('فیلد %s نامعتبر است.', 'sodino'), $field); } return $this; } /** * Check if validation passed */ public function passes() { return empty($this->errors); } /** * Check if validation failed */ public function fails() { return !$this->passes(); } /** * Get all errors */ public function errors() { return $this->errors; } /** * Get first error */ public function firstError() { foreach ($this->errors as $field => $messages) { return $messages[0] ?? ''; } return ''; } /** * Static factory method */ public static function make(array $data) { return new self($data); } }