uspdev / forms
Formulários dinâmicos com persistência
Requires
- php: ^8.2
- illuminate/support: ^12.0
- spatie/laravel-activitylog: ^4.10
- uspdev/replicado: *
Requires (Dev)
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.5
README
Forms é uma biblioteca uspdev para criar formulários dinâmicos a partir de definições persistidas, renderizar HTML, validar submissões, persistir respostas e manipular arquivos enviados.
Funcionalidades
- Gera formulários a partir de definições armazenadas no banco.
- Processa submissões com validação e persistência.
- Permite validar dados sem persistir submissões.
- Suporta versões de definição por
name + version. - Usa a versão ativa quando
versioné omitida em chamadas públicas. - Mantém submissões presas a uma versão concreta de
FormDefinition. - Possui CRUD administrativo.
- Suporta Bootstrap 4 e 5.
- Requer Laravel 12.
Instalação
composer require uspdev/forms php artisan vendor:publish --tag=forms-config php artisan migrate
As migrations do Forms V2 são carregadas diretamente pelo provider do pacote e não devem ser publicadas ou copiadas para a aplicação consumidora.
Menu administrativo
No arquivo config/laravel-usp-theme.php, a chave uspdev-forms faz o menu ficar visível apenas para administradores.
[
'key' => 'uspdev-forms',
],
Sincronização de formulários
Sincroniza definições em .json para form_definitions.
php artisan forms:sync php artisan forms:sync --path=storage/app/formsJson
O comando usa name + version para criar ou atualizar definições.
Formulário de demonstração
Cria ou substitui uma definição de exemplo chamada Demo Form, útil para testar a instalação e visualizar os tipos de campos disponíveis.
php artisan forms:demo
Exemplo rápido
use Uspdev\Forms\Facades\Forms; $html = Forms::render('parecer_final', [ 'action' => route('pareceres.store'), ]);
use Illuminate\Http\Request; use Illuminate\Validation\ValidationException; use Uspdev\Forms\Facades\Forms; public function store(Request $request) { try { $submission = Forms::submit($request); } catch (ValidationException $e) { return back()->withErrors($e->validator)->withInput(); } return redirect()->back()->with('alert-success', 'Formulário enviado com sucesso.'); }
Em integrações sem o HTML gerado pelo pacote, informe a definição diretamente:
$submission = Forms::submit($request, 'parecer_final', 2);
Definições ou versões inexistentes lançam InvalidArgumentException; dados
inválidos lançam ValidationException. A assinatura completa e os demais
fluxos públicos estão em API via facade.
Documentação
Comece por Documentação técnica. Ela organiza os demais documentos na ordem recomendada de leitura.