59-2-Comportamiento con diferentes URLs:2
<?php
// Procesar la URL y obtener las rutas
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);
$countRutas = count($arrayRutasFiltrado);
// Caso 1: Ninguna petición específica (URL base)
if ($countRutas == 0) {
$json = [
"detalle" => "no encontrado"
];
echo json_encode($json, true);
return;
}
// Caso 2: Una sola ruta en la URL
if ($countRutas == 1) {
$rutaSolicitada = $arrayRutasFiltrado[1];
// Petición a registro
if ($rutaSolicitada == "registro") {
// Lógica para registro (pendiente de implementar)
}
// Petición a cursos
if ($rutaSolicitada == "cursos") {
// Lógica para cursos (pendiente de implementar)
}
// Si ninguna ruta válida coincide dentro del bloque de una ruta
$json = [
"detalle" => "no encontrado"
];
echo json_encode($json, true);
return;
}
// Caso 3: Múltiples rutas o ninguna coincidencia
$json = [
"detalle" => "no encontrado"
];
echo json_encode($json, true);
return;Análisis del código:
1. Procesamiento de la URL:
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);Divide la URL en partes usando "/" como separador.
2. Filtrado del array:
$arrayRutasFiltrado = array_filter($arrayRutas);Elimina elementos vacíos del array (como espacios en blanco).
3. Conteo de rutas:
$countRutas = count($arrayRutasFiltrado);Cuenta cuántos segmentos válidos tiene la URL después del dominio.
Comportamiento con diferentes URLs:
Caso 1: URL base - https://miweb.com
$_SERVER['REQUEST_URI'] = "/"
$arrayRutas = ["", ""] → elementos vacíos
$arrayRutasFiltrado = [] → array vacío
$countRutas = 0Resultado: Muestra "no encontrado"
Caso 2: URL con una ruta - https://midominio.com/cursos
$_SERVER['REQUEST_URI'] = "/cursos/"
$arrayRutas = ["", "cursos", ""]
$arrayRutasFiltrado = ["cursos"] → solo el elemento válido
$countRutas = 1Resultado: Entra en el bloque if ($countRutas == 1) y verifica si es "cursos"
Caso 3: URL con múltiples rutas - https://midominio.com/cursos/123
$_SERVER['REQUEST_URI'] = "/cursos/123/"
$arrayRutas = ["", "cursos", "123", ""]
$arrayRutasFiltrado = ["cursos", "123"]
$countRutas = 2Resultado: No entra en ningún bloque condicional y muestra "no encontrado"
Puntos clave:
$countRutascuenta solo los segmentos no vacíos de la URLEl código actual solo maneja URLs con exactamente 1 segmento válido
URLs con más de 1 segmento (como
/cursos/123) siempre devolverán "no encontrado"La URL base (solo dominio) siempre tendrá
$countRutas = 0
Limitaciones:
El código está incompleto (tiene bloques if vacíos para "registro" y "cursos") y solo maneja rutas de un nivel de profundidad.
Explicación del código:
Este código maneja rutas de una API RESTful con tres niveles:
$countRutas == 0: URL base (https://midominio.com)$countRutas == 1: Rutas principales (https://midominio.com/cursos)$countRutas == 2: Rutas con ID (https://midominio.com/cursos/2)
Para la URL https://midominio.com/cursos/2:
$_SERVER['REQUEST_URI'] = "/cursos/2/"
$arrayRutas = ["", "cursos", "2", ""]
$arrayRutasFiltrado = ["cursos", "2"] → elementos 1 y 2
$countRutas = 2Entra en el bloque else if ($countRutas == 2) y verifica:
Si el primer elemento es "cursos"
Si el segundo elemento es numérico
Si el método es GET
Código reescrito y corregido:
<?php
// Procesar la URL
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);
$countRutas = count($arrayRutasFiltrado);
// Caso 1: URL base - ninguna petición
if ($countRutas == 0) {
$json = array(
"detalle" => "no encontrado"
);
echo json_encode($json, true);
return;
}
// Caso 2: Una ruta (ej: /cursos o /registro)
if ($countRutas == 1) {
$ruta = $arrayRutasFiltrado[1];
if ($ruta == "registro") {
// Lógica para registro (pendiente)
}
if ($ruta == "cursos") {
// Lógica para cursos (pendiente)
}
}
// Caso 3: Dos rutas (ej: /cursos/2)
if ($countRutas == 2) {
$ruta = $arrayRutasFiltrado[1];
$id = $arrayRutasFiltrado[2];
if ($ruta == "cursos" && is_numeric($id)) {
if (isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] == "GET") {
$json = array(
"detalle" => "Curso con id " . $id
);
echo json_encode($json, true);
return;
}
}
}
// Si no coincide ninguna ruta válida
$json = array(
"detalle" => "no encontrado"
);
echo json_encode($json, true);
return;Correcciones y mejoras:
Estructura más clara: Bloques
ifseparados en lugar deelse ifanidadosVariables descriptivas:
$rutae$idpara mejor legibilidadSintaxis consistente: Todas las estructuras siguen el mismo formato
Mantenimiento de funcionalidad: Mismo comportamiento original
Corrección de lógica: El bloque de 2 rutas ahora está correctamente posicionado
El código mantiene la simplicidad original pero es más fácil de leer y mantener.
Comentarios
Publicar un comentario