Escolar Documentos
Profissional Documentos
Cultura Documentos
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
(/)
(https://sensiolabs.com)
Caution: You are browsing the legacy symfony 1.x part of this website.
(https://symfony.com/blog/big-summer-sale-on-all-certifications-and-most-items-from-the-symfony-store)
Getting started
(/legacy/doc/getting-started)
Capítulo 1 - Criação do Form
Jobeet (/legacy/doc/jobeet? Um form é feitos de campos como inputs hidden, inputs text, combos e 1.1
orm=Propel) checkboxes. Esse capítulo ensina a você a criação e manipulação de campos de
formulário usando o framework de forms symfony.
A gentle Intro to symfony
(/legacy/doc/gentle- É necessário o Symfony 1.1 para seguir os passos desse capítulo do livro. Você também ira precisar
introduction) criar um projeto e um aplicativo chamado frontend para continuar. Por favor, olhe a introdução para
mais informações sobre a criação de um projeto symfony.
More with Symfony
(/legacy/doc/more-with- Antes de Iniciar
symfony)
Vamos começar adicionando um formulário de contato em uma aplicação symfony
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 1/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
Figura 1-1 Mostra o formulário de contato como visto pelos usuário que querem enviar uma
The Reference Book SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
SymfonyHub
mensagem.
(/legacy/doc/reference)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Figura 1-1 - Formulário de contato
Tutorials (/legacy/doc/tutorial)
Forms (/legacy/doc/forms)
Askeet (1.0)
(/legacy/doc/askeet/1_0)
Table of Contents
Nós vamos criar 3 campos para este formulário: o nome do usuário, o email do usuário e a mensagem
Antes de Iniciar
que o usuário quer enviar. Vamos simplesmente mostrar a informação submetida no formulário para
Widgets
o propósito deste exercício como mostrado na figura 1-2.
Classes sfForm e sfWidget
Mostrando o Formulário
Figura 1-2 - Página de Agradecimento
Rótulos(Labels)
Indo além das tabelas
geradas
Submetendo o formulário
Outra solução
configurando os Widgets
Figura 1-3 - Interação entre a aplicação e o usuário
Opções dos Widgets
Os atributos HTML dos
Widgets
Definindo valores padrão
para os campos
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 2/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
SymfonyHub
This work is licensedSymfonyCloud
under the hosts your Symfony project (https://symfony.com/cloud/)
Creative Commons
Attribution-Share
(/)
Alike 3.0
About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Unported License license.
Widgets
Classes sfForm e sfWidget
(https://certification.symfony.com)
O usuário digita informação nos campos que compõe os formulários. No symfony um form é uma
30% discount in Symfony
herança de objeto da classe sfForm . No nosso exemplo, nós vamos criar uma classe ContactForm que
certifications (ends June 18)
herda a classe sfForm .
(https://certification.symfony.com)
Nota
sfForm é a classe base de todos os formulários e torna facil gerenciar a configuração e vida
dos seus formulários.
Você pode iniciar a configuração de seu formulário adicionando widgets com o método configura()
Um widget representa um campo do formulário. Para nosso formulário de exemplo, nós precisamos
(https://symfony.com/cloud/? adicionar 3 widgets que representam nossos três campos: name , email , e message . Listagem 1-1
mostra a primeira implementação da classe ContactForm
utm_source=ad&utm_medium=banner&utm_campaign=cloud&utm_content=focus)
Focus now on your code, we
Listagem 1-1 - Classe ContactForm com três campos
take care of the rest
(https://symfony.com/cloud/?
utm_source=ad&utm_medium=banner&utm_campaign=cloud&utm_content=focus)
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 3/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
{
$this->setWidgets(array(
));
Os widgets são definidos no método configura() . Esse método é automaticamente chamado pelo
construtor da classe sfForm
O método setWidgets() é usado para definir os widgets usados no form. O método setWidgets()
aceita um array associativo onde as chaves são os nomes do campos e os valores são classes widget.
Cada widget é um objeto que herda a classe sfWidget . Para esse exemplo nós usamos dois tipos de
widgets:
Nota
Como convenção, nós guardamos as classes de form no diretório lib/form . Você pode
guardar elas em qualquer diretório gerenciado pelo mecanismo de autoloading do symfony, mas
como vamos ver mais tarde, o symfony usa o diretório lib/form para gerar formulários
baseados em objetos de modelo(ORM)
Mostrando o Formulário
Nosso formulário agora esta pronto para ser usado. Nós agora podemos criar um módulo symfony
para mostrar o formulário:
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 4/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
No módulo contact , vamos modificar a action index para passar uma instancia do formulário para o
template, conforme a Listagem 1-2.
// apps/frontend/modules/contact/actions/actions.class.php
Quando criando um formulário, o método configura() , definido anteriormente, vai ser chamado
automaticamente.
Agora nós só precisamos criar um template para mostrar o formulário, como mostrado na Listagem
1-3.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 5/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
<table>
<tr>
<td colspan="2">
</td>
</tr>
</table>
</form>
Usar essa construção <?php echo $form ?> é muito bom para criação de protótipos e definindo os
formulários. Isso permite que os desenvolvedores se concentrem nas regras de negócio sem se
preocupar com aspectos visuais. O capitulo três vai explicar como personalizaro template e o layout
do formulário.
Nota
Ao mostrar um objeto usando <?php echo $form ?> , a engine PHP vai realmente mostrar a
representação textual do objeto $form . Para converter um objeto em uma string, o PHP tenta
executar o metódo mágico __toString() . Cada widget implementa este método mágico para
converter o objeto em código HTML. Chamando <?php echo $form ?> é o mesmo que chamar <?
php echo $form->__toString() ?> .
Agora nós podemos ver o formulário em um navegador (Figura 1-4) e verificar o resultado digitando
o endereço da ação contact/index ( /frontend_dev.php/contact ).
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 6/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 7/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
<table>
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
-->
<tr>
<th><label for="name">Name</label></th>
</tr>
<tr>
<th><label for="email">Email</label></th>
</tr>
<tr>
<th><label for="message">Message</label></th>
</tr>
-->
<tr>
<td colspan="2">
</tr>
</table>
</form>
Podemos ver que o formulário é exibido com três linhas <tr> de uma tabela HTML. Esse é o motivo
de termos que fechar a tag <table> . Cada linha inclui uma tag <label> e uma tag de formulário
( <input> ou <textarea> ).
Rótulos(Labels)
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 8/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
SymfonyHub
Os rótulos de cada campo são gerados automaticamente. Por padrão, rótulos são a transformação do
SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
nome do campo seguindo as seguintes regras: Capitalizar a primeira letra e traço é trocado para
(/)
espaço.
About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Exemplo:
$this->setWidgets(array(
'first_name' => new sfWidgetFormInput(), // rótulo gerado: "First name"
));
Mesmo se a geração automática de rótulos é útil, o framework permite que você defina rótulos
personalizados com o método setLabels() :
Como definir:
$this->widgetSchema->setLabels(array(
));
Você pode também modificar somente um único rótulo com o método setLabel() ;
Finalmente, iremos ver no capítulo três que você pode extender os rótulos no template para
personalizar o form.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 9/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
Widget Schema
SymfonyHub SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
Quando usamos o método setWidgets() , o symfony cria um objeto sfWidgetFormSchema .
(/) About
(/what-is-symfony) Esse objeto é Connect
um widget que permite que você
Documentation
(/doc/current/index.html) represente um grupo de widgets. EmCloud
(/cloud/)
Screencasts
(https://symfonycasts.com/) nosso
(/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
formulário de contato, nós chamamos o método setWidgets() . Isso é equivalente ao código
a seguir:
$this->setWidgetSchema(new sfWidgetFormSchema(array(
)));
));
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 10/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
public function configura()
$this->setWidgets(array(
));
$this->widgetSchema->setFormFormatterName('list');
Esses dois formatos vem por padrão, no capítulo 5 vamos ver como criar nossos próprios classes de
formato. Agora que sabemos como mostrar um formulário, vamos ver como controlar a submissão.
Submetendo o formulário
Quando criamos um template para mostrar um formulário, usamos a URL interna contact/submit na
tag form para enviar o form. Agora precisamos criar a action submit no módulo contact . A Listagem
1-5 mostra como a ação pode pegar a informação do usuário e redirecionar para uma pagina de
agradecimento onde apenas mostramos as informações novamente pro usuário.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 11/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
$this->forward404Unless($request->isMethod('post'));
$params = array(
);
$this->redirect('contact/thankyou?'.http_build_query($params));
}
// apps/frontend/modules/contact/templates/thankyouSuccess.php
<ul>
</ul>
Nota
http_build_query é uma função nativa do PHP que gera uma string codificada como URL a
partir de um array de paramêtros.
Por razões de segurança, checamos se a página foi submetida usando o método HTTP POST . Se
não foi usado este método, o usuário é redirecionado para uma pagina de erro 404. No template
indexSuccess , declaramos o método de envio como POST ( <form ... method="POST"> ):
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 12/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
A seguir pegamos os valores digitados pelo usuário e guardamos na tabela params :
$params = array(
);
$this->redirect('contact/thankyou?'.http_build_query($params));
Ao invés de redirecionar o usuário para outra página, poderiamos ter criado um template
submitSuccess.php . Mesmo sendo isso possível, é uma boa prática sempre redirecionar o usuário
após uma requisição do método POST :
O usuário pode clicar no botão de Voltar sem precisar ficar clicando na pop-up de aviso de
reenvio de informações de formulário.
Dica
Voçê deve ter notado que o método executeSubmit() é diferente do executeIndex() . Ao
chamar esses métodos o symfony passa o objeto sfRequest atual como primeiro argumento dos
métodos executeXXX() . Em PHP, você não precisa coletar todos os parametrôs, por isso que você
não define a variavel request no método executeIndex() ja que você não precisa dela.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 13/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Nota
Ao mostrar novamente as informações que o usuário digitou no template, você corre o
risco de um ataque XSS(Cross-Site Scripting). Você pode achar maiores informações sobre como
previnir esses tipos de ataque implementando uma estratégia de escape no capítulo Inside the
View Layer (http://www.symfony-project.org/book/1_1/07-Inside-the-View-
Layer#Output%20Escaping) do livro "The Definitive Guide to symfony".
Após submeter o formulário, você deve ver agora a pagina conforme a Figura 1-6.
Invés de criar o array params , é mais fácil pegar a informação vinda do usuário diretamente em um
array.
Listagem1-6 modifica o atributo HTML name dos widgets para armazenar os valores dos
campos no array contact .
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 14/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
public function configura()
$this->setWidgets(array(
));
$this->widgetSchema->setNameFormat('contact[%s]');
Chamando setNameFormat() nos permite modificar o atributo HTML name de todos os widgets. %s vai
ser automaticamente trocado pelo nome do campo durante a geração do formulário. Por exemplo, o
atributo name sera contact[email] para o campo email . O PHP automaticamente cria um array com
os valores do request incluindo um no formato contact[email] . Dessa forma os valores dos campo
estarão disponíves no array contact .
Nós agora podemos acessar diretamente o array contact do objeto request como mostrado na
Listagem 1-7
$this->forward404Unless($request->isMethod('post'));
$this->redirect('contact/thankyou?'.http_build_query($request->getParameter('contact')));
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 15/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
Ao olhar o fonte HTML do formulário, você podera ver que o symfony gerou o atributo name
SymfonyHub SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
dependendo não apenas do nome do campo e do formato, mas também do atributo id . O atributo
(/) About
(/what-is-symfony)
id é automaticamente criado
Connect a partir do atributo name trocando os caracteres invalidos por traços
(/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
( _ ):
Outra solução
Neste exemplo, usamos duas actions para controlar o formulário: index para mostra-lo, submit para
enviar-lo. Sendo o formulário mostrado com o método GET e enviado com o método POST , podemos
mesclar esses dois métodos no index , como mostrado na Listagem 1-8.
if ($request->isMethod('post'))
$this->redirect('contact/thankyou?'.http_build_query($request->getParameter('contact')));
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 16/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) <form Connect
action="<?php (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html)
echo Screencasts
(https://symfonycasts.com/)
url_for('contact/index') ?>" method="POST"> Cloud
(/cloud/)
Como veremos depois, nós preferimos usar essa forma ja que ela é menor e torna o código mais
coerente e legivel.
configurando os Widgets
Opções dos Widgets
Se website é controlado por varios webmasters, nós com certeza gostariamos de adicionar uma
combo com temas para redirecionar a mensagem de acordo com o que é pedido.(Figura 1-7). A
Listagem 1-9 adiciona um subject com uma combo usando o widget sfWidgetFormSelect .
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 17/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
protected static $subjects = array('Subject A', 'Subject B', 'Subject C');
$this->setWidgets(array(
));
$this->widgetSchema->setNameFormat('contact[%s]');
O PHP não diferencia um array de um array associativo, então o array que usamos na lista de
subjects é o mesmo que o código a seguir:
$subjects = array(0 => 'Subject A', 1 => 'Subject B', 2 => 'Subject C');
O widget gerado pega a chave do array para o atributo value da tag option e o valor como
conteudo da tag:
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 18/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony)
<option value="1">Subject B</option>
Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
<option value="2">Subject C</option>
</select>
$subjects = array('A' => 'Subject A', 'B' => 'Subject B', 'C' => 'Subject C');
</select>
O widget sfWidgetFormSelect', assim como todos os outros, pega uma lista de opções como primeiro
argumento. Uma opção pode ser obrigatória ou opcional. O widget sfWidgetFormSelect possui uma
opção obrigatória, choices`. Aqui esta as opções disponíveis para todos os widgets que usamos até
aqui:
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 19/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
SymfonyHub Widget
SymfonyCloud hosts your Opções Obrigatórias
Symfony project (https://symfony.com/cloud/) Opções Adicionais
(/) About
(/what-is-symfony) sfWidgetFormTextarea -
Documentation
(/doc/current/index.html) -
Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Dica
Se você que conhecer todas as opções para um widget, você olhar documentação completa
da API disponível online em (/api/1_1/ (http://www.symfony-project.org/api/1_1/)). Todas as
opções são explicadas, assim como os valores padrões da opções adicionais. Por exemplo, todas
as opções do widget sfWidgetFormSelect estão aqui: (/api/1_1/sfWidgetFormSelect
(http://www.symfony-project.org/api/1_1/sfWidgetFormSelect)).
// Generated HTML
<input type="text" name="contact[email]" class="email" id="contact_email" />
Atributos HTML permitem também que nós sobrescrevamos o identificador gerado automaticamente,
como mostrado na Listagem 1-11.
// Generated HTML
<input type="text" name="contact[email]" class="email" id="email" />
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 20/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
É possivel ainda colocar valores padrão nos campos usando o atributo value , como mostra a
SymfonyHub SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
Listagem 1-12.
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Listagem 1-12 - Valores Default nos Widgets via atributos HTML
// Generated HTML
<input type="text" name="contact[email]" value="Your Email Here" id="contact_email" />
Essa opção funciona para widgets input , mas é dificil fazer o mesmo com os widgets checkbox ou
radio , e é impossivel com o widget textarea . A classe sfForm tem métodos especificos para definir
valores padrão para cada campo de um forma uniforme para qualquer tipo de widget.
Nota
Recomendamos definir os atributos HTML dentro dos templates e não no formulário(se
forpossível) para presevar a separação em camadas, que vamos ver no capítulo três.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 21/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
(/) About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
public function configura()
// ...
$this->setDefaults(array('email' => 'Your Email Here', 'name' => 'Your Name Here'));
Os métodos setDefault() e setDefaults() são muitos para definir valores padrão iguais para cada
instancia de uma mesma classe de formulário. Se você quer modificar um objeto existente usando um
formulário, os valores padrão irão depender dessa instancia, portanto, eles devem ser dinâmicos. A
listagem 1-14 mostra que o construtor da classe sfForm recebe como primeiro argumento uma lista
de valores padrões que seta dinamicamente os valores padrão
$this->form = new ContactForm(array('email' => 'Your Email Here', 'name' => 'Your Name Here'))
// ...
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 22/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
SymfonyHub
Ao setr atributos HTML para widgets ou definindo valores padrão, a classe sfForm
SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
automaticamente protege esses valores contra ataques XSS durante a geração do código
(/) About
(/what-is-symfony) HTML. Essa proteção
Connect não depende da configuração escaping_strategy do arquivo Cloud
(/cloud/)
(/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/)
settings.yml . Se um valor ja foi protegido por outro método, essa proteção não sera
aplicada novamente.
Ele também protege contra os caracteres ' and " que podem invalidar o HTML gerado.
));
// HTML gerado
<input
value="Hello "World!""
class="<script>alert("foo")</script>"
/>
Latest from the Symfony Blog They Help Us Make Symfony Get Involved in the Community
Our ephemeral online shop closes at the A passionate group of over 600,000
end of the month! (/blog/our-ephemeral- developers from more than
120 countries,
online-shop-closes-at-the-end-of-the- all committed to helping PHP surpass the
month) impossible.
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 23/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
Blog (/blog/)
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 24/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
g (/ g/)
Events & Meetups (/events)
SymfonyHub SymfonyCloud hosts your Symfony project (https://symfony.com/cloud/)
A week of symfony (/blog/category/a-week-of-symfony)
Case studies
(/) (/blog/category/case-studies)
About
(/what-is-symfony) Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html) Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
Cloud (/blog/category/cloud)
Community (/blog/category/community)
Conferences (/blog/category/conferences)
Diversity (/blog/category/diversity)
Documentation (/blog/category/documentation)
Living on the edge (/blog/category/living-on-the-edge)
Releases (/blog/category/releases)
Security Advisories (/blog/category/security-advisories)
SymfonyInsight (/blog/category/symfony-insight)
Twig (/blog/category/twig)
SensioLabs (https://blog.sensiolabs.com/)
Services (https://sensiolabs.com)
Our services (https://sensiolabs.com)
Train developers (https://training.sensiolabs.com/en)
Manage your project quality (https://insight.symfony.com/)
Improve your project performance (https://blackfire.io/?utm_source=symfony&utm_medium=symfonycom_footer&utm_campaign=profiler)
Host Symfony projects (/cloud/)
About (/about)
SensioLabs
(https://sensiolabs.com/en/join_us/join_us.html)
Careers
(https://sensiolabs.com/en/join_us/our_job_offers.html)
Support
(/support)
Cloud TOS
(/cloud/tos)
Deployed on
(/cloud/)
Follow Symfony
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 25/26
21/06/2021 Capítulo 1 - Criação do Form (1_1)
SymfonyHub
(https://github.com/symfony)
(https://stackoverflow.com/questions/tagged/symfony)
(https://twitter.com/symfony)
(https://www.facebook.com/SymfonyFramework)
(/) About
(/what-is-symfony)
(https://www.youtube.com/user/SensioLabs)
Connect (/connect/login?target=https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation)
Documentation
(/doc/current/index.html)
(https://symfonycasts.com/)
Screencasts
(https://symfonycasts.com/) Cloud
(/cloud/)
(https://feeds.feedburner.com/symfony/blog)
Dynamic (same as OS)
https://symfony.com/legacy/doc/forms/1_1/pt_BR/01-form-creation 26/26