VanguardAI/app/Core/HttpHelper.php
2024-10-27 12:50:51 -06:00

119 lines
2.8 KiB
PHP

<?php
namespace App\Core;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
class HttpHelper
{
/**
* Obtiene una solicitud desde las variables globales ($_GET, $_POST, etc.)
*
* @return Request
*/
public static function getRequest(): Request
{
return Request::createFromGlobals();
}
/**
* Crea una respuesta HTML estándar.
*
* @param string $content
* @param int $statusCode
* @param array $headers
* @return Response
*/
public static function createResponse(
string $content,
int $statusCode = 200,
array $headers = []
): Response {
return new Response($content, $statusCode, $headers);
}
/**
* Crea una respuesta JSON.
*
* @param array $data
* @param int $statusCode
* @param array $headers
* @return void
*/
public static function createJsonResponse(
array $data,
int $statusCode = 200,
array $headers = []
) {
http_response_code($statusCode);
header("Content-Type: application/json");
foreach ($headers as $key => $value) {
header("{$key}: {$value}");
}
echo json_encode($data);
exit();
}
/**
* Redirige a una URL específica.
*
* @param string $url
* @param int $statusCode
* @return RedirectResponse
*/
public static function redirect(
string $url,
int $statusCode = 302
): RedirectResponse {
return new RedirectResponse($url, $statusCode);
}
/**
* Extrae un parámetro de la solicitud (GET, POST, etc.) con saneamiento.
* Si es una solicitud JSON, extrae los datos del cuerpo JSON.
*
* @param Request $request
* @param string $key
* @param mixed $default
* @param int|null $filter
* @return mixed
*/
public static function getParam(
Request $request,
string $key,
$default = null,
int $filter = null
) {
$contentType = $request->headers->get("Content-Type", "");
if (strpos($contentType, "application/json") === 0) {
$data = json_decode($request->getContent(), true);
$value = $data[$key] ?? $default;
} else {
$value = $request->get($key, $default);
}
if ($filter !== null) {
return filter_var($value, $filter);
}
return $value;
}
/**
* Obtiene la IP del cliente de manera segura.
*
* @param Request $request
* @return string|null
*/
public static function getClientIp(Request $request): ?string
{
return $request->getClientIp();
}
}