Controles de formulário
Visão geral dos controles de formulário incorporados.
addText(string|int $name, $label=null): TextInput
Adiciona campo de texto de linha única (classe TextInput). Se o usuário não preencher o campo,
retorna uma string vazia ''
, ou usa setNullable()
para alterá-lo para retornar null
.
$form->addText('name', 'Name:')
->setRequired()
->setNullable();
Ela valida automaticamente UTF-8, apara os espaços em branco à esquerda e à direita e remove quebras de linha que poderiam ser enviadas por um atacante.
O comprimento máximo pode ser limitado usando setMaxLength()
. O addFilter() permite alterar o valor inserido pelo usuário.
Use setHtmlType()
para mudar o caráter do elemento de entrada para
search
, tel
, url
, range
, date
, datetime-local
,
month
, time
, week
, color
. Em vez dos tipos number
e
email
, recomendamos usar addInteger e addEmail, que
fornecem validação do lado do servidor.
$form->addText('color', 'Choose color:')
->setHtmlType('color')
->addRule($form::Pattern, 'invalid value', '[0-9a-f]{6}');
O chamado valor vazio pode ser definido para o elemento, que é algo como o valor padrão, mas se o usuário não
o sobrescrever, retorna uma string vazia ou null
.
$form->addText('phone', 'Phone:')
->setHtmlType('tel')
->setEmptyValue('+420');
addTextArea(string|int $name, $label=null): TextArea
Adiciona um campo de texto com várias linhas (classe TextArea). Se o usuário não preencher o campo,
ele retorna uma string vazia ''
, ou use setNullable()
para alterá-lo para retornar
null
.
$form->addTextArea('note', 'Note:')
->addRule($form::MaxLength, 'Your note is way too long', 10000);
Valida automaticamente o UTF-8 e normaliza as quebras de linha para \n
. Ao contrário de um campo de entrada de
linha única, ele não apara o espaço em branco.
O comprimento máximo pode ser limitado usando setMaxLength()
. O addFilter() permite alterar o valor inserido pelo usuário. Você pode
definir o chamado valor vazio usando setEmptyValue()
.
addInteger(string|int $name, $label=null): TextInput
Adiciona campo de entrada para o número inteiro (classe TextInput). Retorna ou um número inteiro ou
null
se o usuário não inserir nada.
$form->addInteger('level', 'Level:')
->setDefaultValue(0)
->addRule($form::Range, 'Level must be between %d and %d.', [0, 100]);
addEmail(string|int $name, $label=null): TextInput
Adiciona campo de endereço de e-mail com verificação de validade (classe TextInput). Se o usuário não preencher o campo,
devolve uma string vazia ''
, ou usa setNullable()
para alterá-lo para retornar null
.
$form->addEmail('email', 'Email:');
Verifica que o valor é um endereço de e-mail válido. Não verifica que o domínio realmente existe, apenas a sintaxe é verificada. Valida automaticamente o UTF-8, apara espaços em branco à esquerda e à direita.
O comprimento máximo pode ser limitado usando setMaxLength()
. O addFilter() permite alterar o valor inserido pelo usuário. Você pode
definir o chamado valor vazio usando setEmptyValue()
.
addPassword(string|int $name, $label=null): TextInput
Adiciona o campo de senha (classe TextInput).
$form->addPassword('password', 'Password:')
->setRequired()
->addRule($form::MinLength, 'Password has to be at least %d characters long', 8)
->addRule($form::Pattern, 'Password must contain a number', '.*[0-9].*');
Quando você reenviar o formulário, a entrada estará em branco. Ela valida automaticamente o UTF-8, apara os espaços em branco à esquerda e à direita e remove quebras de linha que poderiam ser enviadas por um atacante.
addCheckbox(string|int $name, $caption=null): Checkbox
Acrescenta uma caixa de seleção ( caixa de
seleção de classe). O campo retorna ou true
ou false
, dependendo se está marcado.
$form->addCheckbox('agree', 'I agree with terms')
->setRequired('You must agree with our terms');
addCheckboxList(string|int $name, $label=null, array $items=null): CheckboxList
Adiciona lista de caixas de seleção para selecionar vários itens (classe CheckboxList). Retorna a matriz de chaves dos
itens selecionados. O método getSelectedItems()
retorna valores em vez de chaves.
$form->addCheckboxList('colors', 'Colors:', [
'r' => 'red',
'g' => 'green',
'b' => 'blue',
]);
Passamos o conjunto de itens como o terceiro parâmetro, ou pelo método setItems()
.
Você pode usar setDisabled(['r', 'g'])
para desativar itens individuais.
O elemento verifica automaticamente que não houve falsificação e que os itens selecionados são realmente um dos oferecidos
e não foram desativados. O método getRawValue()
pode ser usado para recuperar os itens submetidos sem esta
importante verificação.
Quando os valores padrão são definidos, ele também verifica se eles são um dos itens oferecidos, caso contrário, ele
lança uma exceção. Esta verificação pode ser desativada com checkDefaultValue(false)
.
addRadioList(string|int $name, $label=null, array $items=null): RadioList
Acrescenta botões de rádio (classe RadioList). Devolve a chave do item selecionado, ou
null
caso o usuário não tenha selecionado nada. O método getSelectedItem()
retorna um valor em vez
de uma chave.
$sex = [
'm' => 'male',
'f' => 'female',
];
$form->addRadioList('gender', 'Gender:', $sex);
Passamos o conjunto de itens como o terceiro parâmetro, ou pelo método setItems()
.
Você pode usar setDisabled(['m'])
para desativar itens individuais.
O elemento verifica automaticamente que não houve falsificação e que o item selecionado é realmente um dos oferecidos e
não foi desativado. O método getRawValue()
pode ser usado para recuperar o item submetido sem esta importante
verificação.
Quando o valor padrão é definido, ele também verifica se ele é um dos itens oferecidos, caso contrário, ele lança uma
exceção. Esta verificação pode ser desativada com checkDefaultValue(false)
.
addSelect(string|int $name, $label=null, array $items=null): SelectBox
Adiciona caixa de seleção (classe SelectBox). Devolve a chave do item selecionado, ou
null
caso o usuário não tenha selecionado nada. O método getSelectedItem()
retorna um valor em vez
de uma chave.
$countries = [
'CZ' => 'Czech republic',
'SK' => 'Slovakia',
'GB' => 'United Kingdom',
];
$form->addSelect('country', 'Country:', $countries)
->setDefaultValue('SK');
Passamos o conjunto de itens como o terceiro parâmetro, ou pelo método setItems()
. A matriz de itens também
pode ser bidimensional:
$countries = [
'Europe' => [
'CZ' => 'Czech republic',
'SK' => 'Slovakia',
'GB' => 'United Kingdom',
],
'CA' => 'Canada',
'US' => 'USA',
'?' => 'other',
];
Para caixas seletas, o primeiro item muitas vezes tem um significado especial, serve como uma chamada para ação. Use
o método setPrompt()
para adicionar tal entrada.
$form->addSelect('country', 'Country:', $countries)
->setPrompt('Pick a country');
Você pode usar setDisabled(['CZ', 'SK'])
para desativar itens individuais.
O elemento verifica automaticamente que não houve falsificação e que o item selecionado é realmente um dos oferecidos e
não foi desativado. O método getRawValue()
pode ser usado para recuperar o item submetido sem esta importante
verificação.
Quando o valor padrão é definido, ele também verifica se ele é um dos itens oferecidos, caso contrário, ele lança uma
exceção. Esta verificação pode ser desativada com checkDefaultValue(false)
.
addMultiSelect(string|int $name, $label=null, array $items=null): MultiSelectBox
Adiciona caixa de seleção de múltipla escolha (classe MultiSelectBox). Devolve a matriz de chaves
dos itens selecionados. O método getSelectedItems()
retorna valores em vez de chaves.
$form->addMultiSelect('countries', 'Countries:', $countries);
Passamos o conjunto de itens como o terceiro parâmetro, ou pelo método setItems()
. A matriz de itens também
pode ser bidimensional.
Você pode usar setDisabled(['CZ', 'SK'])
para desativar itens individuais.
O elemento verifica automaticamente que não houve falsificação e que os itens selecionados são realmente um dos oferecidos
e não foram desativados. O método getRawValue()
pode ser usado para recuperar os itens submetidos sem esta
importante verificação.
Quando os valores padrão são definidos, ele também verifica se eles são um dos itens oferecidos, caso contrário, ele
lança uma exceção. Esta verificação pode ser desativada com checkDefaultValue(false)
.
addUpload(string|int $name, $label=null): UploadControl
Adiciona o campo upload do arquivo (classe UploadControl). Retorna o objeto FileUpload, mesmo que o usuário não tenha feito upload de um arquivo, o que pode ser
descoberto pelo método FileUpload::hasFile()
.
$form->addUpload('avatar', 'Avatar:')
->addRule($form::Image, 'Avatar must be JPEG, PNG, GIF or WebP')
->addRule($form::MaxFileSize, 'Maximum size is 1 MB', 1024 * 1024);
Se o arquivo não foi carregado corretamente, o formulário não foi enviado com sucesso e um erro é exibido. Ou seja, não
é necessário verificar o método FileUpload::isOk()
.
Não confie no nome do arquivo original devolvido pelo método FileUpload::getName()
, um cliente poderia enviar um
nome de arquivo malicioso com a intenção de corromper ou invadir seu aplicativo.
As regras MimeType
e Image
detectam o tipo de arquivo ou imagem exigida por sua assinatura.
A integridade do arquivo inteiro não é verificada. Você pode descobrir se uma imagem não está corrompida, por exemplo, ao
tentar carregá-la.
addMultiUpload(string|int $name, $label=null): UploadControl
Adiciona o campo de carregamento de múltiplos arquivos (classe UploadControl). Retorna um array de objetos FileUpload. O método FileUpload::hasFile()
retornará true
para
cada um deles.
$form->addMultiUpload('files', 'Files:')
->addRule($form::MaxLength, 'A maximum of %d files can be uploaded', 10);
Se um dos arquivos não for carregado corretamente, o formulário não foi enviado com sucesso e um erro é exibido. Ou seja,
não é necessário verificar o método FileUpload::isOk()
.
Não confie nos nomes originais dos arquivos devolvidos pelo método FileUpload::getName()
, um cliente poderia
enviar um nome de arquivo malicioso com a intenção de corromper ou invadir sua aplicação.
As regras MimeType
e Image
detectam o tipo de arquivo ou imagem exigida por sua assinatura.
A integridade do arquivo inteiro não é verificada. Você pode descobrir se uma imagem não está corrompida, por exemplo, ao
tentar carregá-la.
addHidden(string|int $name, string $default=null): HiddenField
Adiciona campo oculto (classe HiddenField).
$form->addHidden('userid');
Use setNullable()
para mudá-lo para retornar null
ao invés de um fio vazio. O addFilter() permite que você altere o valor submetido.
addSubmit(string|int $name, $caption=null): SubmitButton
Adiciona botão submeter (classe SubmitButton).
$form->addSubmit('submit', 'Register');
É possível ter mais de um botão de envio no formulário:
$form->addSubmit('register', 'Register');
$form->addSubmit('cancel', 'Cancel');
Para descobrir qual deles foi clicado, use:
if ($form['register']->isSubmittedBy()) {
// ...
}
Se você não quiser validar o formulário quando um botão de envio for pressionado (como Cancelar ou Pré-visualizar botões), você pode desligá-lo com setValidationScope().
addButton(string|int $name, $caption): Button
Adiciona botão ( Botão de classe) sem função de submissão. É útil para vincular outras funcionalidades à identificação, por exemplo, uma ação JavaScript.
$form->addButton('raise', 'Raise salary')
->setHtmlAttribute('onclick', 'raiseSalary()');
addImageButton(string|int $name, string $src=null, string $alt=null): ImageButton
Adiciona botão submeter em forma de uma imagem (classe ImageButton).
$form->addImageButton('submit', '/path/to/image');
Ao usar vários botões de envio, você pode descobrir qual deles foi clicado com
$form['submit']->isSubmittedBy()
.
addContainer(string|int $name): Container
Adiciona um subforma ( Container classe), ou um
recipiente, que pode ser tratado da mesma forma que um formulário. Isso significa que você pode usar métodos como
setDefaults()
ou getValues()
.
$sub1 = $form->addContainer('first');
$sub1->addText('name', 'Your name:');
$sub1->addEmail('email', 'Email:');
$sub2 = $form->addContainer('second');
$sub2->addText('name', 'Your name:');
$sub2->addEmail('email', 'Email:');
Os dados enviados são então devolvidos como uma estrutura multidimensional:
[
'first' => [
'name' => /* ... */,
'email' => /* ... */,
],
'second' => [
'name' => /* ... */,
'email' => /* ... */,
],
]
Visão geral das configurações
Para todos os elementos, podemos chamar os seguintes métodos (ver documentação API para uma visão geral completa):
setDefaultValue($value) |
define o valor padrão |
getValue() |
obter valor atual |
setOmitted() |
valores omitidos |
setDisabled() |
desabilitando entradas |
Renderização:
setCaption($caption) |
altere o título do item |
setTranslator($translator) |
define o tradutor |
setHtmlAttribute($name, $value) |
define o atributo HTML do elemento |
setHtmlId($id) |
define o atributo HTML id |
setHtmlType($type) |
define o atributo HTML type |
setHtmlName($name) |
define o atributo HTML name |
setOption($key, $value) |
define os dados de renderização |
Validação:
setRequired() |
campo obrigatório |
addRule() |
estabelecer regra de validação |
addCondition() , addConditionOn() |
estabelecer condição de validação |
addError($message) |
passando mensagem de erro |
Os seguintes métodos podem ser chamados para o addText()
, addPassword()
, addTextArea()
,
addEmail()
, addInteger()
itens:
setNullable() |
define se getValue() retorna null em vez de string vazia |
setEmptyValue($value) |
define o valor especial que é tratado como cadeia vazia |
setMaxLength($length) |
define o número máximo de caracteres permitidos |
addFilter($filter) |
modificando os valores de entrada |
Valores omitidos
Se você não estiver interessado no valor inserido pelo usuário, podemos usar setOmitted()
para omiti-lo do
resultado fornecido pelo método $form->getValues()
ou passado para os manipuladores. Isto é adequado para
várias senhas de verificação, campos antispam, etc.
$form->addPassword('passwordVerify', 'Password again:')
->setRequired('Fill your password again to check for typo')
->addRule($form::Equal, 'Password mismatch', $form['password'])
->setOmitted();
Desativação de entradas
A fim de desativar uma entrada, você pode ligar para setDisabled()
. Tal campo não pode ser editado pelo
usuário.
$form->addText('username', 'User name:')
->setDisabled();
Note que o navegador não envia os campos desativados para o servidor, portanto você não os encontrará nem mesmo nos dados
devolvidos pela função $form->getValues()
.
Se você estiver definindo um valor padrão para um campo, você deve fazê-lo somente após desativá-lo:
$form->addText('username', 'User name:')
->setDisabled()
->setDefaultValue($userName);
Controles personalizados
Além de uma ampla gama de controles embutidos no formulário, você pode adicionar controles personalizados ao formulário da seguinte forma:
$form->addComponent(new DateInput('Date:'), 'date');
// sintaxe alternativa: $form['date'] = novo DateInput('Date:');
A forma é um descendente da classe Container e os elementos são descendentes de Componente.
Há uma maneira de definir novos métodos de formulário para adicionar elementos personalizados (por exemplo,
$form->addZip()
). Estes são os chamados métodos de extensão. O lado negativo é que as dicas de código nos
editores não funcionarão para eles.
use Nette\Forms\Container;
// adiciona método addZip(string $name, string $label = null)
Container::extensionMethod('addZip', function (Container $form, string $name, string $label = null) {
return $form->addText($name, $label)
->addRule($form::Pattern, 'At least 5 numbers', '[0-9]{5}');
});
// uso
$form->addZip('zip', 'ZIP code:');
Campos de baixo nível
Para adicionar um item ao formulário, você não precisa ligar para $form->addXyz()
. Os itens do formulário
podem ser introduzidos exclusivamente em modelos. Isto é útil se você, por exemplo, precisar gerar itens dinâmicos:
{foreach $items as $item}
<p><input type=checkbox name="sel[]" value={$item->id}> {$item->name}</p>
{/foreach}
Após a apresentação, você pode recuperar os valores:
$data = $form->getHttpData($form::DataText, 'sel[]');
$data = $form->getHttpData($form::DataText | $form::DataKeys, 'sel[]');
No primeiro parâmetro, você especifica o tipo de elemento (DataFile
para type=file
,
DataLine
para entradas de uma linha como text
, password
ou email
e
DataText
para o resto). O segundo parâmetro corresponde ao atributo HTML name
. Se você precisar
preservar chaves, você pode combinar o primeiro parâmetro com DataKeys
. Isto é útil para select
,
radioList
ou checkboxList
.
O getHttpData()
retorna entrada higienizada. Neste caso, será sempre um conjunto de cordas UTF-8 válidas, não
importando o que o atacante tenha enviado pelo formulário. É uma alternativa ao trabalho com $_POST
ou
$_GET
diretamente, se você quiser receber dados seguros.