Skip to content

Atributos – Referencia de API

Namespace: Alxarafe\Attribute

Alxarafe usa Atributos PHP 8 para definir declarativamente rutas, entradas de menú, permisos y metadatos de módulos. Los atributos se leen en tiempo de ejecución vía Reflection por la capa de servicios del framework.

Jerarquía de Clases

text
#[ApiRoute]          — Define endpoints API en métodos de controlador
#[Menu]              — Registra elementos de menú en clases o métodos
#[ModuleInfo]        — Declara metadatos de visualización en clases Module
#[RequireModule]     — Marca un campo/clase como dependiente de un módulo
#[RequirePermission] — Requiere un permiso específico
#[RequireRole]       — Requiere uno o más roles

#[ApiRoute]

Destino: METHOD (repetible)
Namespace: Alxarafe\Attribute\ApiRoute
Fuente: [ApiRoute.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/ApiRoute.php)

Define una ruta API REST en un método de controlador. Usado por ApiRouter para construir la tabla de rutas API.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$pathstring(requerido)Ruta API (ej. '/api/users')
$methodstring'GET'Método HTTP: GET, POST, PUT, DELETE, PATCH, OPTIONS

Ejemplo

php
use Alxarafe\Attribute\ApiRoute;

class UserApiController extends ApiController
{
    #[ApiRoute('/api/users', 'GET')]
    public function list(): array { /* ... */ }

    #[ApiRoute('/api/users', 'POST')]
    public function create(): array { /* ... */ }
}

Destino: CLASS | METHOD (repetible)
Namespace: Alxarafe\Attribute\Menu
Fuente: [Menu.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/Menu.php)

Registra un controlador o método como elemento de menú. Leído por MenuManager::get() para construir la navegación.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$menustring(requerido)Identificador del grupo de menú (ej. 'main_menu', 'admin_sidebar')
$label?stringnullEtiqueta (clave de traducción o texto)
$icon?stringnullClase FontAwesome (ej. 'fas fa-users')
$route?stringnullRuta nombrada (Module.Controller.action)
$url?stringnullURL explícita (sobrescribe route)
$parent?stringnullElemento padre para anidación
$orderint99Orden (menor = primero)
$permission?stringnullPermiso requerido para mostrar
$visibilitystring'auth'Quién lo ve: 'auth', 'guest', 'public'
$badgeResolver?stringnullFQCN del resolver de conteo de badge
$badgeClass?stringnullClase CSS para el estilo del badge
$class?stringnullClases CSS adicionales
$module?stringnullNombre del módulo fuente (auto-detectado si null)

Ejemplo

php
use Alxarafe\Attribute\Menu;

#[Menu(menu: 'main_menu', label: 'users', icon: 'fas fa-users', order: 10)]
class UserController extends ResourceController
{
    // ...
}

#[ModuleInfo]

Destino: CLASS
Namespace: Alxarafe\Attribute\ModuleInfo
Fuente: [ModuleInfo.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/ModuleInfo.php)

Declara metadatos visuales para un módulo. Se coloca en la clase Module.php en la raíz del directorio del módulo.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$namestring(requerido)Nombre legible del módulo
$descriptionstring''Descripción corta
$iconstring'fas fa-puzzle-piece'Clase de icono FontAwesome
$setupController?stringnullFQCN del controlador de configuración
$coreboolfalseSi true, el módulo está siempre habilitado

Ejemplo

php
use Alxarafe\Attribute\ModuleInfo;

#[ModuleInfo(name: 'CRM', description: 'Gestión de Relaciones con Clientes', icon: 'fas fa-id-card')]
class Module {}

#[RequireModule]

Destino: CLASS | PROPERTY | PARAMETER
Namespace: Alxarafe\Attribute\RequireModule
Fuente: [RequireModule.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/RequireModule.php)

Marca un campo, clase o parámetro como dependiente de un módulo específico habilitado.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$modulestring(requerido)Nombre del módulo que debe estar habilitado

Ejemplo

php
use Alxarafe\Attribute\RequireModule;
use Alxarafe\Component\Fields\Decimal;

// Campo solo visible cuando el módulo 'Trading' está activo
#[RequireModule('Trading')]
$campoComision = new Decimal('commission', 'Comisión %');

#[RequirePermission]

Destino: CLASS | METHOD (repetible)
Namespace: Alxarafe\Attribute\RequirePermission
Fuente: [RequirePermission.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/RequirePermission.php)

Requiere un permiso específico para acceder a un controlador o método.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$permissionstring(requerido)Identificador de permiso (ej. 'admin.users.delete')

Ejemplo

php
use Alxarafe\Attribute\RequirePermission;

class UserController extends ResourceController
{
    #[RequirePermission('admin.users.delete')]
    public function doDelete(): bool { /* ... */ }
}

#[RequireRole]

Destino: CLASS | METHOD
Namespace: Alxarafe\Attribute\RequireRole
Fuente: [RequireRole.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/RequireRole.php)

Requiere uno o más roles para acceder a un controlador o método.

Parámetros del Constructor

ParámetroTipoDefectoDescripción
$rolesstring|array(requerido)Uno o múltiples nombres de rol. Almacenado internamente como string[].

Ejemplo

php
use Alxarafe\Attribute\RequireRole;

#[RequireRole(['admin', 'manager'])]
class AdminDashboardController extends Controller
{
    // Solo usuarios con roles 'admin' o 'manager' pueden acceder
}