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
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);
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.
Vista previa fiel a la interfaz real. Para verla tal cual es, sin ilustración de por medio, prueba la demo en vivo.
Cada columna se detecta y renderiza con el widget correcto. Sobreescribible por columna cuando lo necesites.
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.
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.
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
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.
composer require appylogi/appycrud