PHPackages                             uspdev/forms - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Validation &amp; Sanitization](/categories/validation)
4. /
5. uspdev/forms

ActiveLibrary[Validation &amp; Sanitization](/categories/validation)

uspdev/forms
============

Formulários dinâmicos com persistência

0.7.0(1mo ago)01214[2 issues](https://github.com/uspdev/forms/issues)GPL-2.0-or-laterPHPPHP ^8.2

Since Oct 21Pushed 1mo ago10 watchersCompare

[ Source](https://github.com/uspdev/forms)[ Packagist](https://packagist.org/packages/uspdev/forms)[ RSS](/packages/uspdev-forms/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (6)Versions (21)Used By (0)

Forms
=====

[](#forms)

Forms é uma biblioteca **uspdev** que permite gerar formulários dinâmicos a partir de definições armazenadas em banco de dados e, opcionalmente, persiste os resultados.

Funcionalidades
---------------

[](#funcionalidades)

- Gera formulários a partir de definições no BD;
- Processa a submissão dos formulários com validação e persistência;
- Mostra o resultado com views padrão;
- Possui crud completo para `admin`;
- Suporta estilos em Bootstrap 4 e 5;
- Integra com aplicações Laravel 11 em diante.

Instalação
----------

[](#instalação)

1. **Instale a biblioteca via Composer e publique as migrations**

```
composer require uspdev/forms
php artisan vendor:publish --tag=forms-migrations
php artisan migrate
```

2. **Menu na aplicação**

No arquivo `config/laravel-usp-theme.php`, adicione ou reposicione a chave uspdev-forms para mostrar o menu. Ele será visível apenas para administradores.

```
[
    'key' => 'uspdev-forms',
],
```

Configuração
------------

[](#configuração)

Você pode personalizar as configurações do pacote modificando o arquivo `config/uspdev-forms.php`.

```
php artisan vendor:publish --tag=forms-config

```

Formulário demo
---------------

[](#formulário-demo)

Popula o banco com um formulário de demonstração com vários tipos de campos, facilitando testes rápidos.

```
php artisan forms:demo
```

Sincronização de formulários
----------------------------

[](#sincronização-de-formulários)

Sincroniza definições de formulários em `.json` para a tabela `form_definitions` de forma idempotente (create ou update).

```
php artisan forms:sync
```

Por padrão, o comando lê os arquivos do diretório configurado em `uspdev-forms.forms_storage_dir`.

Opcionalmente, você pode informar outro diretório:

```
php artisan forms:sync --path=storage/app/formsJson
```

Uso
---

[](#uso)

1. **Crie uma entrada na tabela form\_definitions**
2. Nome do formulário: nome único que identifica o formulário
3. Grupo: serve para agrupar vários formulários em implementações mais complexas
4. Descrição: campo livre sem uso específico no sistema
5. Campos: campos do formulário

    OBS.: **Os campos USP dependem do replicado**.

- **texto de 1 linha**

```
[
    {
      "name": "name",
      "type": "text",
      "label": "Nome (text)",
      "required": true
    },
]
```

- **dois campos na mesma linha**

```
  [
    {
      "name": "name",
      "type": "text",
      "label": "Nome (text)",
      "required": true
    },
    {
      "name": "email",
      "type": "email",
      "label": "Email (email)",
      "required": false
    }
  ],
```

- select simples

```
[
  {
    "name": "rating",
    "type": "select",
    "label": "Avaliação (select)",
    "options": [
      "1",
      "2",
      "3",
      "4",
      "5"
    ]
  },
]
```

- textarea

```
[
  {
    "name": "message",
    "type": "textarea",
    "label": "Mensagem (textarea)"
  },
]
```

- file (upload de arquivo)

```
[
  {
    "name": "arquivo",
    "type": "file",
    "label": "Arquivo",
    "accept": ".pdf, image/*"
  },
]
```

- **pessoa-usp**

```
[
  {
    "name": "codpes",
    "type": "pessoa-usp",
    "label": "Pessoa USP",
    "required": true
  },
]
```

- disciplina-usp

```
[
  {
    "name": "coddis",
    "type": "disciplina-usp",
    "label": "Disciplina USP",
    "required": true
  },
]
```

- patrimonio-usp

```
[
  {
    "name": "numpat",
    "type": "patrimonio-usp",
    "label": "Patrimônio USP",
    "required": true
  },
]
```

- local-usp

```
[
  {
    "name": "codlocusp",
    "type": "local-usp",
    "label": "Local USP",
    "required": true
  },
]
```

- data

```
[
  {
    "name": "data",
    "type": "date",
    "label": "Campo de data",
    "required": true
  },
]
```

```
FormDefinition::create($form);

```

2. **Gere o formulário na sua view:**

Use a classe FormGenerator para renderizar o formulário no seu template Blade:

```
use Uspdev\Forms\Form;

$form = new Form($key = null, ['action' => route('forms.action')]);
$formHtml = $form->generateHtml('demo'); // conforme definido em $form

// ....
```

3. **Trate as submissões do formulário:**

No seu controller, trate a submissão do formulário salvando os dados no banco de dados:

```
public function store(Request $request)
{
  $form = (new Form())->handleSubmission($request);

  // ....
}
```

4. **Listar submissões**Recupere todas as submissões em geral ou de um formulário específico:

```
$allSubmissions = $form->listSubmission();

// Ou

$allFormNameSubmissions = $form->listSubmission('form-name');
```

5. **Obter submissão**Recupere uma submissão específica pelo seu id:

```
$formSubmission = $form->getSubmission($formSubmissionId);
```

6. **Download de arquivo**Faça o download de um arquivo de uma submissão através do nome do campo:

```
$formSubmission = $form->downloadSubmissionFile($formSubmission, $fieldName);
```

OBS.: Os arquivos são armazenados em storage/app/formsubmissions/&lt;ano&gt;/id&lt;00&gt;-&lt;hash&gt;.&lt;ext&gt;. Caso tenha problemas de download verifique se os arquivos estão no local correto.

Campos
------

[](#campos)

### Tipos

[](#tipos)

- pessoa-usp: campo tipo select que faz busca no replicado e retorna uma pessoa. nome do campo recomendado: codpes;
- disciplina-usp: campo tipo select que faz busca no replicado e retorna uma disciplina. nome do campo recomendado: coddis;
- patrimonio-usp: campo tipo select que faz busca no replicado e retorna um bem patrimoniado. nome do campo recomendado: numpat;
- local-usp: campo tipo select que faz busca no replicado e retorna um local da usp já formatado. nome do campo recomendado: codlocusp;
- data: data simples no formato dd/mm/aaaa;
- text: texto simples (linha única);
    - pode passar `"maxlength": 100` para limitar a quantidade de caracteres;
- number: campo numérico;
    - pode passar `"min"`, `"max"` e `"step"` para definir limites e incremento;
- email: valida campos email;
- select: precisa passar `options`;
- textarea: parágrafos;
- file: pode passar `"accept" : ".pdf, image/*"`;

### Atributos adicionais por campo

[](#atributos-adicionais-por-campo)

#### width para todos os campos

[](#width-para-todos-os-campos)

O atributo `width` define a largura do campo no grid do Bootstrap (`col-1` até `col-12`).

```
{
  "type": "text",
  "name": "nome",
  "width": 6
}
```

HTML gerado:

```

```

Contribuindo
------------

[](#contribuindo)

Contribuições são bem-vindas! Siga estes passos para contribuir:

- Faça um fork do repositório.
- Crie um novo branch (git checkout -b feature/SuaFuncionalidade).
- Faça suas alterações e commit (git commit -m 'Adiciona nova funcionalidade').
- Envie para o branch (git push origin feature/SuaFuncionalidade).
- Crie um novo Pull Request.

### Resumo do Conteúdo

[](#resumo-do-conteúdo)

- **Visão Geral do Pacote**: Descreve o que o pacote faz.
- **Funcionalidades**: Destaca as principais funcionalidades.
- **Passos de Instalação**: Fornece instruções detalhadas de instalação.
- **Detalhes de Configuração**: Guia sobre como personalizar as configurações.
- **Exemplos de Uso**: Mostra como criar um formulário YAML e usá-lo na sua aplicação.
- **Guia de Contribuição**: Incentiva contribuições com passos claros.
- **Informações de Licença**: Indica a licença

###  Health Score

45

—

FairBetter than 93% of packages

Maintenance90

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community17

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~27 days

Recently: every ~55 days

Total

20

Last Release

49d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8a59480189a3ba1aa8355cb434880695569433f5d1c9e375e8238d5ff1a56beb?d=identicon)[uspdev](/maintainers/uspdev)

---

Top Contributors

[![antonioacampos](https://avatars.githubusercontent.com/u/129632162?v=4)](https://github.com/antonioacampos "antonioacampos (66 commits)")[![masakik](https://avatars.githubusercontent.com/u/986915?v=4)](https://github.com/masakik "masakik (43 commits)")[![Lucalopezz](https://avatars.githubusercontent.com/u/120069994?v=4)](https://github.com/Lucalopezz "Lucalopezz (17 commits)")[![ViniReiwz](https://avatars.githubusercontent.com/u/170970877?v=4)](https://github.com/ViniReiwz "ViniReiwz (10 commits)")

### Embed Badge

![Health badge](/badges/uspdev-forms/health.svg)

```
[![Health](https://phpackages.com/badges/uspdev-forms/health.svg)](https://phpackages.com/packages/uspdev-forms)
```

###  Alternatives

[spatie/laravel-honeypot

Preventing spam submitted through forms

1.6k6.0M60](/packages/spatie-laravel-honeypot)[proengsoft/laravel-jsvalidation

Validate forms transparently with Javascript reusing your Laravel Validation Rules, Messages, and FormRequest

1.1k2.3M49](/packages/proengsoft-laravel-jsvalidation)[stevebauman/purify

An HTML Purifier / Sanitizer for Laravel

5325.6M19](/packages/stevebauman-purify)[axlon/laravel-postal-code-validation

Worldwide postal code validation for Laravel and Lumen

3853.3M1](/packages/axlon-laravel-postal-code-validation)[sunspikes/clamav-validator

Custom Laravel 5 anti-virus validator for file uploads.

3651.8M3](/packages/sunspikes-clamav-validator)[laravel-validation-rules/credit-card

Validate credit card number, expiration date, cvc

2412.2M5](/packages/laravel-validation-rules-credit-card)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
