Documentación OXIRA Core v1.0.0
Un microframework PHP MVC diseñado para la velocidad, basado en la filosofía de Convención sobre Configuración.
Filosofía del Framework
- Convención sobre Configuración: Si sigues las reglas de nombres, todo funciona automáticamente.
- Routing Automático: No existen archivos de rutas. La estructura de carpetas define la URL.
- Separación Estricta: El código se divide en áreas:
Front,Admin,UseryApi. - Hosting Friendly: Funciona en cualquier servidor compartido con PHP 8.0+.
Instalación
Sigue estos pasos para desplegar el framework en producción o local:
- Descarga y descomprime el archivo
OXIRA-MicroMVC.zipen la raíz de tu servidor. - Copia el archivo
.env.examplea.env. - Configura tu base de datos en el archivo
.env.
APP_ENV=development
APP_URL=http://localhost/mi-proyecto
DB_HOST=localhost
DB_NAME=oxira_db
DB_USER=root
DB_PASS=
Estructura del Proyecto
El orden es vital. El framework detecta automáticamente las carpetas.
/
├── app/
│ ├── Core/ # Motor del framework (Router, Controller, Model)
│ ├── Controllers/ # Lógica de entrada
│ │ ├── Admin/ # Controladores del panel administrativo
│ │ ├── Api/ # Endpoints JSON
│ │ ├── User/ # Área de cliente logueado
│ │ └── (raiz) # Controladores públicos (Front)
│ ├── Models/ # Lógica de base de datos
│ └── Views/ # Plantillas HTML
├── config/ # Configuraciones estáticas
├── assets/ # CSS, JS, Imágenes (acceso directo)
├── .env # Credenciales (Git ignore)
└── index.php # Punto de entrada único
app/Core.
El Core se reutiliza entre proyectos.
Toda la personalización va en Controllers, Models y Views.
Core del Framework (NO TOCAR)
La carpeta
app/Core no debe modificarse bajo ningún motivo.
El Core es reutilizable entre proyectos y controla:
routing, seguridad, renderizado y errores.
El Core se encarga de:
- Resolver la URL y detectar el área (Front, Admin, User, Api).
- Cargar automáticamente el Controller correcto.
- Aplicar seguridad antes de ejecutar cualquier método.
- Renderizar vistas y layouts por área.
- Manejar errores 404 / 403 / 500.
Todo el desarrollo del proyecto debe realizarse únicamente en:
Controllers, Models y Views.
Routing Automático
OXIRA Core elimina la necesidad de declarar rutas manualmente. El Router interpreta la URL basándose en segmentos.
/Area/Controlador/Metodo/Parametros
| URL Solicitada | Área | Controlador (Archivo) | Método | Params |
|---|---|---|---|---|
/ |
Front | HomeController.php |
index() |
- |
/noticias |
Front | NoticiasController.php |
index() |
- |
/noticias/ver/15 |
Front | NoticiasController.php |
ver(15) |
15 |
/admin/ventas |
Admin | Admin/VentasController.php |
index() |
- |
Subcarpetas y Escalabilidad
OXIRA Core permite crear subcarpetas ilimitadas sin configuración adicional.
Ejemplo:
/admin/settings/currencies/1/edit
↓
Controllers/Admin/Settings/CurrenciesController::edit(1)
Para lograrlo solo debes crear:
app/Controllers/Admin/Settings/CurrenciesController.php
app/Views/admin/settings/currencies/edit.php
No se tocan rutas.
No se modifica el Core.
Controladores
Los controladores orquestan la respuesta. Deben extender siempre de la clase base Controller.
Ejemplo: Controlador Público
Archivo: app/Controllers/ProductoController.php
class ProductoController extends Controller
{
public function index()
{
return $this->view('producto/index', [
'titulo' => 'Listado de Productos'
]);
}
public function detalle($id)
{
if (!$id) {
$this->redirect('/producto');
}
$producto = $this->model('Producto')->find($id);
return $this->view('producto/detalle', $producto);
}
}
Ejemplo: Controlador Admin (Protegido)
Archivo: app/Controllers/Admin/DashboardController.php
class DashboardController extends Controller
{
public function index()
{
// No necesitas verificar sesión aquí.
// El Core protege automáticamente toda la carpeta /Admin
// Carga views/admin/dashboard/home.php
return $this->view('dashboard/home');
}
}
Modelos
Los modelos interactúan con la base de datos usando PDO nativo y seguro.
Archivo: app/Models/Usuario.php
class Usuario extends Model
{
public function obtenerTodos()
{
return $this->db->query("SELECT * FROM usuarios");
}
public function crear($datos)
{
$stmt = $this->db->prepare(
"INSERT INTO usuarios (nombre, email) VALUES (?, ?)"
);
return $stmt->execute([$datos['nombre'], $datos['email']]);
}
}
Vistas y Layouts
Las vistas se organizan estrictamente por área para evitar mezclar el frontend con el panel de administración.
app/Views/{area}/{carpeta}/{archivo}.php
Estructura recomendada
Views/
├── front/
│ ├── layout.php # Diseño principal (Header, Footer público)
│ ├── home.php # Vista de inicio
│ └── partials/ # Fragmentos (nav, sidebar)
├── admin/
│ ├── layout.php # Diseño del panel (Sidebar admin, Topbar)
│ └── dashboard/
│ └── home.php
└── user/
└── layout.php
Uso en el archivo de vista
El framework inyecta automáticamente el contenido dentro del layout.php del área.
<!-- app/Views/front/producto/detalle.php -->
<div class="producto-card">
<h1><?= $data['nombre'] ?></h1>
<p>Precio: S/ <?= $data['precio'] ?></p>
</div>
Seguridad por Áreas
La seguridad en OXIRA Core es automática y declarativa por carpeta. Se aplica antes de ejecutar cualquier controlador, evitando errores humanos.
| Área / Prefijo URL | Acceso | Comportamiento |
|---|---|---|
/ (Raíz/Front) |
Público | Acceso libre para todos los visitantes. |
/admin/* |
Privado | El Core verifica automáticamente una sesión válida. Si no existe sesión activa, redirige al Login. |
/user/* |
Privado | Requiere sesión de usuario estándar. |
Admin, automáticamente estará protegido. No necesitas agregar lógica de sesión en cada función.
Respuestas JSON (API)
Para devolver datos JSON (para Apps móviles o AJAX), utiliza las cabeceras nativas de PHP.
Archivo: app/Controllers/Api/UsuariosController.php
class UsuariosController extends Controller
{
public function get($id)
{
$data = [
'status' => 'ok',
'id' => $id
];
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
exit;
}
}