Olyxis Framework

Framework PHP moderno y ligero con arquitectura MVC

Características Principales

Todo lo que necesitas para construir aplicaciones web modernas

🏗️

Arquitectura MVC

Separación clara entre Modelos, Vistas y Controladores. Enrutamiento flexible (GET, POST) y sistema de formularios seguro.

CLI Potente

Comandos integrados para iniciar servidor de desarrollo y generar controladores automáticamente.

🗄️

Base de Datos Optimizada

PDO con conexiones persistentes, migraciones y esquemas SQL, índices automáticos y soporte completo UTF-8.

🎨

Frontend Moderno

Integración con Tailwind CSS, componentes responsivos y diseño moderno y profesional.

🔒

Seguridad Avanzada

Prepared statements con PDO, protección contra XSS, validación de entrada y pruebas de pentesting superadas.

⚙️

Configuración Simple

Soporte para archivos .env, configuración centralizada y variables de entorno fáciles de gestionar.

Código Limpio y Elegante

Desarrolla rápidamente con una sintaxis clara y expresiva

ProductController.php
// Ejemplo de controlador simple y potente
class ProductController extends Controller 
{
    public function index(Request $request) 
    {
        $productModel = new Product();
        $products = $productModel->all();
        
        return $this->view('products/index', [
            'products' => $products
        ]);
    }
    
    public function store(Request $request) 
    {
        $productModel = new Product();
        $data = $request->post();
        
        if ($productModel->create($data)) {
            $request->setFlash('success', '¡Producto creado!');
        }
        
        return $this->redirect('/products');
    }
}

Modelos Potentes y Flexibles

CRUD automático con consultas personalizadas

Product.php
namespace App\Models;

use Framework\Core\Model;

class Product extends Model 
{
    protected $table = 'products';
    
    // Obtener productos por categoría
    public function getByCategory($categoryId) 
    {
        return $this->where('category_id = ?', [$categoryId]);
    }
    
    // Buscar productos por nombre
    public function search($query) 
    {
        return $this->where('name LIKE ?', ["%$query%"]);
    }
    
    // Productos con stock bajo
    public function lowStock($threshold = 10) 
    {
        return $this->where('stock < ?', [$threshold]);
    }
}

Seguridad Integrada

Protege tus rutas con middlewares personalizados

AuthMiddleware.php
namespace App\Middlewares;

class AuthMiddleware implements Middleware 
{
    public function handle(Request $request, callable $next) 
    {
        if (!$request->session()->get('user_id')) {
            $request->setFlash('error', 'Debes iniciar sesión');
            return new Response('', 302, ['Location' => '/']);
        }
        return $next($request);
    }
}

// Uso en controlador
class ProductsController extends Controller 
{
    public function __construct() 
    {
        $this->middleware(AuthMiddleware::class);
    }
}

Enrutamiento Intuitivo

Define tus rutas de forma clara y organizada

routes.php
return [
    'GET' => [
        // Páginas principales
        '/' => 'HomeController@index',
        '/login' => 'LoginController@index',
        
        // Productos
        '/productos' => 'ProductosController@index',
        '/productos/crear' => 'ProductosController@create',
        '/productos/{id}' => 'ProductosController@show',
        
        // Categorías
        '/categorias' => 'CategoriasController@index',
        
        // Ventas y Reportes
        '/ventas' => 'VentasController@index',
        '/ventas/reportes' => 'VentasController@reportes',
    ],
    
    'POST' => [
        // Autenticación
        '/login' => 'LoginController@authenticate',
        '/logout' => 'LoginController@logout',
        
        // CRUD Productos
        '/productos/store' => 'ProductosController@store',
        '/productos/update' => 'ProductosController@update',
        '/productos/delete/{id}' => 'ProductosController@destroy',
        
        // Ventas en lote
        '/ventas/store-lote' => 'VentasController@store_lote',
    ]
];

Consumo de APIs y Alertas

Vínculo entre controlador, vista y componentes de notificación

ApiConsumeController.php
public function buscarDni($request) {
    $dni = $request->post('dni');
    $client = new HttpClient(['baseURL' => 'https://api.perudevs.com/api/v1']);

    try {
        $response = $client->get('dni/complete', ['params' => ['document' => $dni, 'key' => $this->apiToken]]);
        $resData = $response->json();

        if ($resData['estado']) {
            $request->setFlash('success', "DNI encontrado con éxito");
            return $this->view('api/index', ['resultado' => $resData['resultado']]);
        }
        $request->setFlash('error', "No se encontró el documento");
    } catch (Exception $e) {
        $request->setFlash('error', $e->getMessage());
    }
    return $this->view('api/index');
}
index.php
<!-- 1. Gestión de Alertas Flash -->
<?php 
$errorMsg = $request->getFlash('error');
$successMsg = $request->getFlash('success');
?>

<?php if ($errorMsg): ?>
    <?php component('Alert', ['type' => 'error', 'message' => $errorMsg]); ?>
<?php endif; ?>

<?php if ($successMsg): ?>
    <?php component('Alert', ['type' => 'success', 'message' => $successMsg]); ?>
<?php endif; ?>

<!-- 2. Formulario de Consulta -->
<form method="POST" action="/api/buscar">
    <input type="text" name="dni" maxlength="8" required>
    <button type="submit">Consultar</button>
</form>

Vistas Dinámicas

Templates modernos con Tailwind CSS integrado

products/index.php
<div class="container mx-auto px-4 py-8">
    <h1 class="text-3xl font-bold mb-6">Productos</h1>
    
    <!-- Mensajes Flash -->
    <?php if ($request->hasFlash('success')): ?>
        <div class="bg-green-100 border-green-400 px-4 py-3 rounded">
            <?php echo $request->getFlash('success'); ?>
        </div>
    <?php endif; ?>
    
    <!-- Grid de Productos -->
    <div class="grid md:grid-cols-3 gap-6">
        <?php foreach ($products as $product): ?>
            <div class="bg-white rounded-lg shadow-lg p-6">
                <h2 class="text-xl font-bold">
                    <?php echo htmlspecialchars($product['name']); ?>
                </h2>
                <p class="text-2xl text-green-600">
                    $<?php echo number_format($product['price'], 2); ?>
                </p>
            </div>
        <?php endforeach; ?>
    </div>
</div>

Consultas Avanzadas

Acceso directo a la base de datos cuando lo necesites

VentasController.php
use Framework\Core\Database;

public function reportes(Request $request) 
{
    $db = Database::getInstance();
    
    $inicio = $request->get('fecha_inicio');
    $fin = $request->get('fecha_fin');
    
    // Consulta personalizada con JOIN
    $ventas = $db->fetchAll("
        SELECT v.*, p.name, p.price, c.name as categoria
        FROM ventas v
        JOIN productos p ON v.producto_id = p.id
        JOIN categorias c ON p.categoria_id = c.id
        WHERE v.fecha BETWEEN ? AND ?
        ORDER BY v.fecha DESC
    ", [$inicio, $fin]);
    
    // Stored Procedure para resumen
    $resumen = $db->call('sp_resumen_ventas', [$inicio, $fin]);
    
    return $this->view('ventas/reportes', [
        'ventas' => $ventas,
        'resumen' => $resumen->fetch()
    ]);
}

Herramientas CLI

Genera código rápidamente desde la terminal

Terminal
# Iniciar servidor de desarrollo en localhost:8000
$ php oly serve

# Ver mapa completo de rutas y controladores
$ php oly route:list

# Generar CRUD completo (Modelo, Controlador, Vistas y Rutas)
$ php oly make:crud Product productos

# Crear solo un modelo vinculado a una tabla
$ php oly make:model User usuarios

# Crear un middleware de seguridad (Onion Pattern)
$ php oly make:middleware Auth

# Inicializar estructura de un nuevo proyecto
$ php oly init

Proyectos Destacados

Aplicaciones reales construidas con el poder de Olyxis

📦

Gestión de Inventario

Sistema profesional de control de stock y almacén. Utiliza la arquitectura MVC de Olyxis para gestionar productos, categorías y movimientos de inventario de forma segura y escalable.

MVC MySQL PHP 8+
Ver Repositorio

Instalación Rápida

Empieza a desarrollar en menos de 5 minutos

01

Clonar el Repositorio

Descarga el framework desde GitHub

git clone https://github.com/Javierborja09/olyxis.git
02

Inicializar Proyecto

Configura la estructura de carpetas (opcional para nuevos proyectos)

php olyxis/oly init
03

Limpieza (Opcional)

Una vez inicializado el proyecto, el comando init ya habrá copiado todo lo necesario a tu directorio actual. Puedes borrar la carpeta temporal olyxis para mantener tu espacio de trabajo limpio.

# En Linux o macOS:
rm -r olyxis

# En Windows (PowerShell):
Remove-Item -Recurse -Force olyxis
03

Configurar Base de Datos

Crea tu archivo .env con las credenciales

DB_HOST=localhost
DB_NAME=olyxis_db
DB_USER=root
DB_PASSWORD=tu_password
04

Iniciar Servidor

Levanta el servidor de desarrollo

php oly serve localhost 8000

Documentación Completa

Guías detalladas para cada componente del framework

📋 Requisitos

  • PHP 8.0 o superior
  • MySQL 8.0 o superior
  • Composer (última versión)
  • SO: Windows, Linux, macOS

🎯 Características

  • Middlewares personalizados
  • Sistema de ventas multi-producto
  • Reportes y KPIs integrados
  • Stored Procedures

🔧 Olyxis CLI v2.0

Potentes herramientas de generación y gestión:

  • php oly serve - Iniciar servidor de desarrollo
  • php oly route:list - Mapa completo de rutas

  • php oly make:crud - Generar módulo completo
  • php oly make:model - Crear modelo de datos
  • php oly make:controller - Crear controlador
  • php oly make:middleware - Capa de seguridad (Onion)
💡 Usa php oly help para ver todos los detalles.

🔒 Seguridad

  • Prepared Statements (SQL Injection)
  • Protección XSS integrada
  • CSRF Protection
  • Validación de entrada robusta

📁 Estructura MVC

  • Controllers - Lógica de negocio
  • Models - Gestión de datos
  • Views - Presentación
  • Routes - Enrutamiento flexible

🚀 Roadmap

  • Autenticación integrada
  • Sistema de permisos (ACL)
  • Generador de CRUD
  • API REST automática