refactor(Core): refactor and optimize code
This commit is contained in:
132
app/Core/Validator.php
Normal file
132
app/Core/Validator.php
Normal file
@@ -0,0 +1,132 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user