Código abierto · Licencia MIT · Sin dependencias

Convierte cualquier tabla en un
CRUD completo, en minutos

Dale una conexión PDO y el nombre de una tabla. AppyCrud genera listado, formularios, filtros, exportación e impresión — con PHP puro, sin frameworks ni build steps. Pruébalo en vivo antes de instalarlo.

Solo requiere ext-pdo. Composer opcional: composer require appylogi/appycrud

index.php
use Appylogi\AppyCrud\AppyCrud;
use Appylogi\AppyCrud\Database\Connection;

$pdo = new PDO('mysql:host=localhost;dbname=mi_bd', 'usuario', 'clave');
$connection = Connection::fromPdo($pdo);

// Eso es todo: listado, crear, editar, filtrar, exportar...
$crud = new AppyCrud($connection, 'clientes');
$html = $crud->handle($baseUrl, $_GET, $_POST);
0
dependencias de PHP obligatorias
26
tipos de campo listos para usar
3
motores de base de datos (MySQL/PostgreSQL/SQLite)
MIT
licencia libre, uso comercial incluido
Características
Todo lo que un CRUD necesita, ya incluido

Nada de reinventar el listado, el formulario o el filtro cada vez. AppyCrud lo genera a partir de la estructura real de tu tabla.

Listado con filtros y orden

Filtro por columna, búsqueda global y orden por AJAX con debounce — sin recargar la página, siempre consulta server-side, incluso con paginación grande.

Constructor de filtros AND/OR

Filas dinámicas combinadas con Y/O, 10 operadores disponibles, y un selector para limitar qué columnas se pueden filtrar en tablas anchas.

Relaciones automáticas

Detecta llaves foráneas solas y las renderiza como <select>. También soporta muchos-a-muchos vía tabla pivote, sincronizada al guardar.

Exportar sin perder filtros

CSV, Excel (.xls) y Markdown, respetando los filtros y la búsqueda activos en pantalla al momento de exportar.

3 modos de borrado

Confirmación con modal propio (no confirm() nativo), borrado directo, o lógico con columna configurable. Más borrado masivo con checkboxes.

26 tipos de campo

Desde booleanos y fechas hasta editor de texto enriquecido, carga de archivos, multiselect estilo select2 y contraseñas con toggle de visibilidad.

Multi-motor vía PDO

MySQL, PostgreSQL o SQLite — y cualquier driver PDO estándar. Sin código específico de un motor mezclado en tu aplicación.

CSRF y hooks por defecto

Protección CSRF activada desde el inicio, más hooks antes/después de insertar, editar o eliminar — pueden cancelar la operación con un mensaje propio.

Scoping multi-tenant

Condiciones fijas (where/whereIn) aplicadas a listado, exportar, ver, editar y eliminar — no solo cosméticas en la pantalla.

En acción
Así se ve en la práctica

Vista previa fiel a la interfaz real. Para verla tal cual es, sin ilustración de por medio, prueba la demo en vivo.

Listado de AppyCrud con filtros por columna, búsqueda y paginación
Listado con filtros por columna, búsqueda global y paginación
Formulario de crear/editar de AppyCrud en un modal
Crear/editar en modal, con validaciones y campos obligatorios marcados
Constructor de filtro avanzado AND/OR de AppyCrud
Constructor de filtro avanzado (AND/OR) con múltiples condiciones
Combobox multiselect estilo select2 de AppyCrud
Multiselect buscable estilo select2, con chips removibles
Ver la interfaz real en la demo
Catálogo
26 tipos de campo, sin escribir HTML a mano

Cada columna se detecta y renderiza con el widget correcto. Sobreescribible por columna cuando lo necesites.

boolean date datetime dropdown_search enum_searchable email float multiselect_searchable multiselect_native password_toggle relational_native richtext richtext_advanced file color hidden invisible + 11 más
Seguridad
Protegido por defecto, no como paso extra

Nada de esto hay que activarlo a mano ni recordarlo cada vez que agregas una tabla — ya está ahí desde el primer new AppyCrud(...).

CSRF en cada escritura

Token de 32 bytes por sesión, verificado con hash_equals antes de crear, editar, eliminar o borrar en masa. Activado por defecto; se puede desactivar solo si tu app ya maneja su propio CSRF.

Sin SQL injection

Todas las consultas — listado, filtros, orden, exportar, guardar — usan prepared statements con parámetros. Los valores del usuario nunca se concatenan a un SQL.

Archivos subidos, neutralizados

Nombre aleatorio (nunca el original), y cualquier extensión ejecutable (.php, .phtml, .exe, .sh, .htaccess, etc.) se reescribe a .bin antes de guardar. El archivo anterior se borra al reemplazarlo o al eliminar el registro.

Editor de texto, sin XSS

El HTML del editor enriquecido se sanitiza siempre al guardar contra una lista blanca de etiquetas — <script>/<style> se eliminan por completo, igual que cualquier atributo salvo href (con esquema validado) y alineación de texto.

Validación real, en el servidor

required, max, min, email, numeric se verifican en PHP antes de guardar — no son solo atributos HTML que cualquiera puede saltarse editando el formulario.

Campos permitidos, no solo ocultos

insertFields/editFields se hacen cumplir del lado del servidor: cualquier campo extra que alguien meta a mano en el POST se descarta, no basta con quitarlo del HTML.

¿Encontraste algo raro o quieres reportar una vulnerabilidad? Abre un issue en GitHub.

Integración
Vanilla, pero no aislado

AppyCrud no depende de ningún framework, así que se integra en Laravel, CodeIgniter o cualquier otro con un controlador delgado: le pasas la conexión y el request, y devuelves el HTML.

Laravel — CrudController.php
use Appylogi\AppyCrud\AppyCrud;
use Appylogi\AppyCrud\Database\Connection;
use Illuminate\Http\Request;

public function handle(Request $request) {
    $connection = Connection::fromPdo(
        DB::connection()->getPdo()
    );
    $crud = new AppyCrud($connection, 'clientes');

    $html = $crud->handle(
        $request->getPathInfo(),
        $request->query->all(),
        $request->request->all(),
        $request->ajax()
    );

    return $request->ajax()
        ? response($html)
        : view('crud.layout', ['html' => $html]);
}
// Route::any('/clientes', [CrudController::class, 'handle'])
// ->withoutMiddleware(VerifyCsrfToken::class); AppyCrud ya trae su propio CSRF
CodeIgniter 4 — Crud.php
use Appylogi\AppyCrud\AppyCrud;
use Appylogi\AppyCrud\Database\Connection;

class Crud extends BaseController {
    public function index() {
        $connection = Connection::fromPdo(
            \Config\Database::connect()->getConnection()
        );
        $crud = new AppyCrud($connection, 'clientes');

        $isAjax = $this->request->isAJAX();
        $html = $crud->handle(
            current_url(true)->getPath(),
            $this->request->getGet(),
            $this->request->getPost(),
            $isAjax
        );

        return $isAjax
            ? $this->response->setBody($html)
            : view('crud_layout', ['html' => $html]);
    }
}
// $routes->add('clientes', 'Crud::index');
// Excluye la ruta del filtro csrf de CI4 — AppyCrud maneja su propio token

Funciona igual en Symfony, Slim o cualquier PHP plano: solo necesita una conexión PDO y los datos de la petición (GET/POST). No usa el ciclo de vida de ningún framework.

Instálalo en menos de un minuto

Con Composer o descargando el ZIP directamente. Sin cuentas, sin licencias, sin límites de tablas ni de registros.

terminal
composer require appylogi/appycrud