Skip to content

Attributes – API Reference

Namespace: Alxarafe\Attribute

Alxarafe uses PHP 8 Attributes to declaratively define routing, menu entries, permissions, and module metadata. Attributes are read at runtime via Reflection by the framework's service layer.

Class Hierarchy

text
#[ApiRoute]          — Defines API endpoints on controller methods
#[Menu]              — Registers menu items on classes or methods
#[ModuleInfo]        — Declares module display metadata on Module classes
#[RequireModule]     — Marks a field/class as needing a specific module
#[RequirePermission] — Requires a specific permission string
#[RequireRole]       — Requires one or more roles

#[ApiRoute]

Target: METHOD (repeatable)
Namespace: Alxarafe\Attribute\ApiRoute
Source: [ApiRoute.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/ApiRoute.php)

Defines a REST API route on a controller method. Used by ApiRouter to build the API route table.

Constructor Parameters

ParameterTypeDefaultDescription
$pathstring(required)API route path (e.g. '/api/users')
$methodstring'GET'HTTP method: GET, POST, PUT, DELETE, PATCH, OPTIONS

Example

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 { /* ... */ }

    #[ApiRoute('/api/users/{id}', 'PUT')]
    public function update(int $id): array { /* ... */ }
}

Target: CLASS | METHOD (repeatable)
Namespace: Alxarafe\Attribute\Menu
Source: [Menu.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/Menu.php)

Registers a controller or method as a menu item. Read by MenuManager::get() to build navigation.

Constructor Parameters

ParameterTypeDefaultDescription
$menustring(required)Menu group identifier (e.g. 'main_menu', 'admin_sidebar', 'user_menu')
$label?stringnullDisplay label (translation key or raw text)
$icon?stringnullFontAwesome icon class (e.g. 'fas fa-users')
$route?stringnullNamed route (Module.Controller.action)
$url?stringnullExplicit URL (overrides route)
$parent?stringnullParent menu item for nesting
$orderint99Sort order (lower = first)
$permission?stringnullRequired permission to show this item
$visibilitystring'auth'Who sees this: 'auth', 'guest', 'public'
$badgeResolver?stringnullFQCN of badge count resolver callable
$badgeClass?stringnullCSS class for badge styling
$class?stringnullAdditional CSS classes for the menu item
$module?stringnullSource module name (auto-detected if null)

Example

php
use Alxarafe\Attribute\Menu;

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

#[ModuleInfo]

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

Declares cosmetic metadata for a module, placed on a Module.php class at the module root. Dependencies are auto-detected by DependencyResolver.

Constructor Parameters

ParameterTypeDefaultDescription
$namestring(required)Human-readable module name
$descriptionstring''Short description
$iconstring'fas fa-puzzle-piece'FontAwesome icon class
$setupController?stringnullFQCN of the module configuration controller
$coreboolfalseIf true, module is always enabled and cannot be toggled off

Example

php
use Alxarafe\Attribute\ModuleInfo;

#[ModuleInfo(
    name: 'CRM',
    description: 'Customer Relationship Management',
    icon: 'fas fa-id-card',
    core: false
)]
class Module {}

#[RequireModule]

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

Marks a field, class, or parameter as requiring a specific module to be enabled. Used by ResourceTrait to conditionally show/hide form fields.

Constructor Parameters

ParameterTypeDefaultDescription
$modulestring(required)Module name that must be enabled

Example

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

// Field only visible when 'Trading' module is active
#[RequireModule('Trading')]
$commissionField = new Decimal('commission', 'Commission %');

#[RequirePermission]

Target: CLASS | METHOD (repeatable)
Namespace: Alxarafe\Attribute\RequirePermission
Source: [RequirePermission.php](file:///home/rsanjose/Desarrollo/Alxarafe/alxarafe/src/Core/Attribute/RequirePermission.php)

Requires a specific permission string to access a controller or method. Checked by PermissionSyncer.

Constructor Parameters

ParameterTypeDefaultDescription
$permissionstring(required)Permission identifier (e.g. 'admin.users.delete')

Example

php
use Alxarafe\Attribute\RequirePermission;

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

#[RequireRole]

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

Requires one or more roles to access a controller or method.

Constructor Parameters

ParameterTypeDefaultDescription
$rolesstring|array(required)One or multiple role names. Stored internally as string[].

Example

php
use Alxarafe\Attribute\RequireRole;

#[RequireRole(['admin', 'manager'])]
class AdminDashboardController extends Controller
{
    // Only users with 'admin' or 'manager' roles can access
}