Skip to content

Controladores – Referencia de API

Namespace: Alxarafe\Base\Controller

La jerarquía de controladores en Alxarafe sigue un patrón de herencia por capas donde cada nivel añade capacidades: menús, vistas, autenticación, base de datos y operaciones CRUD.

Diagrama de Herencia

mermaid
graph TD
    A["GenericController<br/>(abstract)"] --> B["ViewController<br/>(abstract)"]
    B --> C["Controller<br/>(abstract)"]
    B --> D["GenericPublicController<br/>(abstract)"]
    C --> E["ResourceController<br/>(abstract)"]
    D --> F["PublicResourceController<br/>(abstract)"]
    
    A -. "usa" .-> G["ViewTrait"]
    C -. "usa" .-> H["DbTrait"]
    D -. "usa" .-> H
    E -. "usa" .-> I["ResourceTrait"]
    F -. "usa" .-> I
    E -. "implementa" .-> J["ResourceInterface"]
    F -. "implementa" .-> J

Cuándo Extender Cada Controlador

ControladorAuthBDVistasCRUDCaso de Uso
GenericControllerBase mínima, scripts CLI
ViewControllerPáginas estáticas sin auth/BD
GenericPublicControllerPáginas públicas con BD (login, registro)
ControllerPáginas autenticadas con lógica personalizada
ResourceControllerCRUD estándar para modelos Eloquent
PublicResourceControllerCRUD público (raro, ej. catálogo público)

GenericController (abstract)

Namespace: Alxarafe\Base\Controller\GenericController

Controlador base que proporciona despacho de acciones, construcción de menús e inicio automático de traits.

Propiedades

PropiedadTipoDescripción
$actionstringNombre de la acción actual
$topMenuarrayElementos del menú superior
$sidebar_menuarrayElementos del menú lateral
$backUrl?stringURL de "volver" auto-calculada
$titlestringTítulo de la página

Métodos Clave

MétodoFirmaDescripción
index()public index(bool $executeActions = true): boolPunto de entrada por defecto.
executeAction()protected executeAction(): boolResuelve do{Action}() y ejecuta cadena beforeAction()doAction()afterAction().
beforeAction()public beforeAction(): boolHook: pre-procesamiento. Devuelve false para abortar.
afterAction()public afterAction(): boolHook: post-procesamiento.
getModuleName()public static getModuleName(): stringExtrae nombre del módulo del namespace.
getControllerName()public static getControllerName(): stringExtrae nombre del controlador.
url()public static url($action, $params): stringGenera URL para este controlador.

ViewController (abstract)

Extiende: GenericController
Usa: ViewTrait

Añade soporte de plantillas Blade, carga de configuración y helpers de traducción.

Métodos ViewTrait

MétodoFirmaDescripción
setDefaultTemplate()public setDefaultTemplate(?string $name): voidInicializa la plantilla.
addVariable()public addVariable(string $name, mixed $value): voidInyecta variable en la vista Blade.
render()public render(?string $viewPath): stringCompila y devuelve el HTML de la plantilla.

Controller (abstract)

Extiende: ViewController
Usa: DbTrait

Añade autenticación, autorización, verificación de activación de módulos y conectividad de BD.

Comportamiento del Constructor

  1. Llama a ViewController::__construct()
  2. Autenticación: Auth::isLogged() — redirige a login si no
  3. Módulo: MenuManager::isModuleEnabled() — bloquea módulos desactivados
  4. Autorización: Auth::$user->can() — verifica permisos

ResourceController (abstract)

Extiende: Controller
Implementa: ResourceInterface
Usa: ResourceTrait

Controlador principal para operaciones CRUD. Detecta automáticamente modo lista/edición, genera formularios desde metadatos del modelo.

Métodos ResourceTrait Clave

MétodoFirmaDescripción
getModelClass()abstract protected getModelClass(): string|arrayDevuelve FQCN del modelo.
getListColumns()protected getListColumns(): arrayColumnas del listado.
getEditFields()protected getEditFields(): arrayCampos del formulario de edición.
getFilters()protected getFilters(): arrayFiltros del listado.
getTabs()protected getTabs(): arrayPestañas para formularios con tabs.
getTabVisibility()protected getTabVisibility(): arrayVisibilidad condicional de pestañas.
getTabBadges()protected getTabBadges(): arrayContadores badge en pestañas.
doIndex()public doIndex(): boolAcción por defecto.
doSave()public doSave(): boolAcción guardar.
doDelete()public doDelete(): boolAcción eliminar con hooks.
beforeConfig()protected beforeConfig(): voidHook: antes de construir configuración.
beforeList()protected beforeList(): voidHook: antes del listado.
beforeEdit()protected beforeEdit(): voidHook: antes de edición.
afterSaveRecord()protected afterSaveRecord(Model, array): voidHook: después de guardar registro.

Ejemplo

php
namespace Modules\Blog\Controller;

use Alxarafe\Base\Controller\ResourceController;
use Alxarafe\Component\Fields\Text;
use Alxarafe\Component\Fields\Textarea;

class PostController extends ResourceController
{
    protected function getModelClass(): string
    {
        return \Modules\Blog\Model\Post::class;
    }

    protected function getEditFields(): array
    {
        return [
            'general' => [
                'label' => 'General',
                'fields' => [
                    new Text('title', 'Título', ['required' => true]),
                    new Textarea('body', 'Contenido'),
                ],
            ],
        ];
    }
}