letkode/form-schema-bundle

Symfony Bundle for dynamic, database-driven form schemas with extensible field types and option sources.

Maintainers

Package info

github.com/letkode/form-schema-bundle

Type:symfony-bundle

pkg:composer/letkode/form-schema-bundle

Statistics

Installs: 12

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.4 2026-06-09 22:47 UTC

This package is auto-updated.

Last update: 2026-06-11 04:30:09 UTC


README

Symfony Bundle para formularios dinámicos configurables desde base de datos.

Modela formularios en una jerarquía Form → Section → Group → Field, con i18n dinámico, 22 tipos de campo predefinidos y extensibles, opciones desde catálogo interno o repositorios del proyecto, renders estructurales en 3 niveles y caché PSR-6 opt-in.

Requiere PHP 8.4 · Symfony 7.x / 8.x · Doctrine ORM ^3.4

Documentación

Documento Contenido
Instalación Composer, bundle, mapeo de entidades, migraciones
Configuración Todas las opciones del bundle con valores por defecto
Resolver API del FormSchemaResolver, fluent builder, DTOs de salida
Tipos de campo Los 22 tipos built-in, atributos, parámetros UI y option.data
Validación Reglas attributes.validation por tipo — referencia para frontend
Fuentes de opciones general (catálogo BD), entity (repositorios del proyecto)
Renders Renders de Form, Section y Group disponibles y su configuración
Caché Activar caché PSR-6, invalidación automática y manual
Nombres de tabla Personalizar tablas con table_prefix y table_names
Extensibilidad Crear tipos de campo, fuentes y renders propios
Traducciones Estructura i18n, cómo se resuelve el locale activo
Seeders Poblar schemas desde YAML o clases PHP, comandos de consola

Inicio rápido

composer require letkode/form-schema-bundle

Mapea las entidades en tu Entity Manager (ver Instalación):

# config/packages/doctrine.yaml
doctrine:
    orm:
        entity_managers:
            default:
                mappings:
                    LetkodeFormSchemaBundle:
                        type: attribute
                        is_bundle: false
                        dir: '%kernel.project_dir%/vendor/letkode/form-schema-bundle/src/Domain/Entity'
                        prefix: 'Letkode\FormSchemaBundle\Domain\Entity'
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate

Resuelve el schema de un formulario:

$form = $resolver
    ->schema('user_onboarding')
    ->withLocale('es')
    ->withContext('create')   // filtra y sobreescribe atributos según actions[create]
    ->resolve();

Estructura del paquete

Jerarquía de entidades

Form
└── FormSection[]
    └── FormGroup[]
        └── FormField[]

FormOption
└── FormOptionValue[]

Cada nivel puede tener parameters (JSON libre), traducciones y un type_render que controla su render estructural. FormOption es el catálogo de opciones reutilizable (antes FormOptionGeneral).

Renders en 3 niveles

Nivel Responsabilidad Tipos disponibles
FormRender Navegación entre secciones default, stepper, tabs
SectionRender Distribución de grupos dentro de una sección default, accordion, collapsible, tabs
GroupRender Distribución de campos dentro de un grupo default, fieldset, matrix, tabs

Contexto de acción (actions)

Los campos pueden configurar su visibilidad y atributos por contexto:

{
  "attributes": {
    "required": false,
    "actions": {
      "create": { "enabled": true, "required": true },
      "edit":   { "enabled": true, "required": false },
      "show":   { "enabled": true, "readonly": true }
    }
  }
}

El resolver aplica withContext('create') para filtrar campos deshabilitados y sobrescribir required, readonly y otros atributos dinámicos.

Tipos de campo built-in

Categoría Tipos
Texto text, email, password, textarea, rich_text
Numérico number, range
Fecha date, datetime, time
Selección select, select-multiple, radio, checkbox, combobox, duallist, tree
Especiales file, switch, rating, pin