```meta
title: @form — um formulário que grava numa coleção
description: Um formulário que grava cada envio como uma linha de uma coleção do espaço — e, com preview:true, só a aparência dele, sem enviar nada.
```

_flows.md · documentação · [Blocos](/@docs/blocks)_

# @form

Um formulário que grava cada envio como uma linha de uma coleção do espaço: contato, inscrição, lista de espera, pesquisa.

## Ao vivo

Este é o formulário como ele sai numa página, com `preview:true`: os campos funcionam, mas o botão está desligado e nada é enviado — não há para onde enviar. Ele desenha a coleção `contato-exemplo`, declarada na página do [@schema](/@docs/blocks/schema), que não aceita envios de ninguém mas pode ser lida por qualquer leitor — por isso a prévia aparece para você.

```@form collection:contato-exemplo preview:true submit:"Enviar mensagem"
nome
email required
mensagem
```

~~~text
```@form collection:contato-exemplo preview:true submit:"Enviar mensagem"
nome
email required
mensagem
```
~~~

Um campo por linha, com o nome que ele tem na coleção. O tipo vem da coleção: um e-mail é conferido como e-mail, um texto longo vira uma caixa grande. No seu espaço, sem `preview:true`, o mesmo bloco grava cada envio como uma linha da coleção e responde com o texto de `success:`.

## Numa linha só

`layout:inline` põe o campo e o botão lado a lado — para uma lista de espera de um campo só.

```@form collection:contato-exemplo preview:true layout:inline submit:"Me avise"
email required
```

~~~text
```@form collection:contato-exemplo preview:true layout:inline submit:"Me avise"
email required
```
~~~

## Só a aparência

`preview:true` desenha o formulário sem nada que o envie, mesmo que a coleção não aceite ninguém: para uma documentação, a prévia de um tema ou de um modelo, um rascunho de página. Ele aparece para quem pode ler a coleção ou enviar por ela; para os outros, aparece o aviso de formulário fechado. Tire o `preview:true` quando a coleção estiver pronta para receber.

## Outras formas

- `scope:viewer` pede que a pessoa entre e grava o envio no nome dela.
- `mode:edit own:true` lista os envios da própria pessoa e deixa cada um ser mudado.
- Com o corpo vazio, o formulário traz todos os campos que se pode escrever, na ordem da coleção.

## O que precisa

Uma coleção declarada com [@schema](/@docs/blocks/schema) que aceite quem vai enviar: `accepts:anyone` para qualquer leitor, `accepts:members` para as pessoas do espaço. Para quem a coleção não aceita, o formulário não aparece — a não ser como prévia, para quem pode ler a coleção. Para mostrar as respostas, um [@data](/@docs/blocks/data) na mesma coleção.
