Files
sodino/app/Core/Validator.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);
}
}