-
Notifications
You must be signed in to change notification settings - Fork 0
Panel Admin
Un panel admin ligero inspirado en Django: registra un modelo en un archivo y obtienes una interfaz CRUD de listado/creación/edición/borrado — sin escribir controladores ni vistas por recurso. Completamente aislado dentro de admin/; depende de tanuki_login (requiere un usuario autenticado con is_admin = 1).
| Pieza | Archivo |
|---|---|
| Registro de recursos |
admin/admin.php — declara qué modelos aparecen y cómo |
| Controlador genérico |
admin/AdminController.php — un controlador maneja todos los recursos registrados |
| Plantillas |
admin/templates/*.php — independientes del layout de la app principal |
| Script de superusuario | admin/create-superuser.php |
1. Añade la columna is_admin
-- MySQL/MariaDB
ALTER TABLE users ADD COLUMN is_admin TINYINT(1) DEFAULT 0;
-- PostgreSQL
ALTER TABLE users ADD COLUMN is_admin BOOLEAN DEFAULT false;2. Crea tu primera cuenta de administrador
php admin/create-superuser.phpPide nombre, email, contraseña; inserta el usuario con is_admin = 1.
3. Registra tus modelos
// admin/admin.php
return [
'todo' => [
'model' => TodoModel::class,
'label' => 'Tareas',
'list_fields' => ['id', 'title', 'completed', 'created_at'],
'form_fields' => [
'title' => ['type' => 'text', 'label' => 'Título'],
'description' => ['type' => 'textarea', 'label' => 'Descripción'],
'completed' => ['type' => 'checkbox', 'label' => 'Completada'],
],
'order_by' => 'created_at',
'order_dir' => 'DESC',
],
];Tipos de campo: text, textarea, checkbox, password. El tipo password nunca muestra el hash guardado y solo actualiza el campo si no está vacío — obligatorio al crear, opcional (mantiene el valor actual) al editar.
4. Activa las rutas
// routes.php — principio del archivo
require_once __DIR__ . '/admin/AdminController.php';
// array de rutas
'GET /admin' => 'AdminController@dashboard',
'GET /admin/{resource}' => 'AdminController@index',
'GET /admin/{resource}/create' => 'AdminController@create',
'POST /admin/{resource}' => 'AdminController@store',
'GET /admin/{resource}/{id}/edit' => 'AdminController@edit',
'PUT /admin/{resource}/{id}' => 'AdminController@update',
'DELETE /admin/{resource}/{id}' => 'AdminController@destroy',admin/templates/layout.php, dashboard.php, index.php, form.php son PHP puro — edítalas directamente. AdminController::render() no usa el view() de la app principal, así que las plantillas de admin son totalmente independientes de includes/head.php/footer.php.
- La tuya:
/profile(detanuki_login) — pide la contraseña actual. - La de otro usuario: registra
usersenadmin/admin.phpy edítalo desde/admin/users— sin comprobación de contraseña actual, ya que es una acción de administrador sobre la cuenta de otra persona.
Borra la carpeta admin/, quita el require_once y las rutas de routes.php. Nada más en el proyecto referencia admin/.