133 lines
3.7 KiB
PHP
133 lines
3.7 KiB
PHP
<?php
|
|
namespace Sodino\Core;
|
|
|
|
/**
|
|
* Validation Helper
|
|
*/
|
|
class Validator {
|
|
private $errors = [];
|
|
private $data = [];
|
|
|
|
public function __construct(array $data) {
|
|
$this->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);
|
|
}
|
|
}
|