Initial commit

This commit is contained in:
Hamza-Ayed
2026-05-21 00:40:47 +03:00
commit 8e429d8313
14 changed files with 1152 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
<?php
namespace App\Controllers;
use App\Core\Request;
use App\Core\Response;
/**
* Foundation controller offering model loading, request parsing, and validation helpers.
*/
class BaseController
{
/**
* Validate request payload and return array of errors if any fail
*
* @param Request $request
* @param array $rules List of keys and their validation constraints (e.g. ['email' => 'required|email'])
* @return array Empty if valid, otherwise contains error messages
*/
protected function validate(Request $request, array $rules): array
{
$errors = [];
$data = $request->getBody();
foreach ($rules as $field => $constraints) {
$value = $data[$field] ?? null;
$constraintsArray = explode('|', $constraints);
foreach ($constraintsArray as $constraint) {
if ($constraint === 'required') {
if ($value === null || $value === '') {
$errors[$field][] = "The {$field} field is required.";
}
} elseif ($constraint === 'email') {
if ($value !== null && $value !== '' && !filter_var($value, FILTER_VALIDATE_EMAIL)) {
$errors[$field][] = "The {$field} must be a valid email address.";
}
} elseif (strpos($constraint, 'min:') === 0) {
$min = (int) substr($constraint, 4);
if ($value !== null && strlen((string)$value) < $min) {
$errors[$field][] = "The {$field} must be at least {$min} characters.";
}
}
}
}
return $errors;
}
}