Files
Woles-Framework/app/Core/Controller.php

127 lines
2.8 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Core;
/**
* NovaCore Base Controller
* All controllers should extend this class
*/
abstract class Controller
{
protected Request $request;
protected Response $response;
protected View $view;
protected Security $security;
public function __construct()
{
$this->request = app('request');
$this->response = app('response');
$this->view = app('view');
$this->security = app('security');
}
/**
* Get request instance
*/
protected function request(): Request
{
return $this->request;
}
/**
* Get response instance
*/
protected function response(): Response
{
return $this->response;
}
/**
* Get underlying view engine instance
*/
protected function viewEngine(): View
{
return $this->view;
}
/**
* Get security instance
*/
protected function security(): Security
{
return $this->security;
}
/**
* Render a view
*/
protected function view(string $view, array $data = []): string
{
return $this->view->render($view, $data);
}
/**
* Return JSON response
*/
protected function json(array $data, int $status = 200): Response
{
return $this->response->json($data, $status);
}
/**
* Redirect to URL
*/
protected function redirect(string $url, int $status = 302): void
{
$this->response->redirect($url, $status);
}
/**
* Return error response
*/
protected function error(string $message, int $status = 400): Response
{
return $this->response->json(['error' => $message], $status);
}
/**
* Return success response
*/
protected function success(array $data = [], string $message = 'Success'): Response
{
return $this->response->json([
'success' => true,
'message' => $message,
'data' => $data
]);
}
/**
* Validate request data
*/
protected function validate(array $data, array $rules): array
{
$errors = [];
foreach ($rules as $field => $rule) {
$value = $data[$field] ?? null;
if (str_contains($rule, 'required') && empty($value)) {
$errors[$field] = "The {$field} field is required.";
}
if (str_contains($rule, 'email') && !filter_var($value, FILTER_VALIDATE_EMAIL)) {
$errors[$field] = "The {$field} field must be a valid email address.";
}
if (str_contains($rule, 'min:') && strlen($value) < (int)substr($rule, 4)) {
$min = substr($rule, 4);
$errors[$field] = "The {$field} field must be at least {$min} characters.";
}
}
return $errors;
}
}