<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>/webdev</title>
	<atom:link href="http://andreiabohner.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://andreiabohner.wordpress.com</link>
	<description></description>
	<lastBuildDate>Sat, 13 Apr 2013 22:46:00 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='andreiabohner.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>/webdev</title>
		<link>http://andreiabohner.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://andreiabohner.wordpress.com/osd.xml" title="/webdev" />
	<atom:link rel='hub' href='http://andreiabohner.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Symfony2 Cheat Sheet: Routing</title>
		<link>http://andreiabohner.wordpress.com/2013/04/13/symfony2-cheat-sheet-routing/</link>
		<comments>http://andreiabohner.wordpress.com/2013/04/13/symfony2-cheat-sheet-routing/#comments</comments>
		<pubDate>Sat, 13 Apr 2013 22:46:00 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=682</guid>
		<description><![CDATA[Routing &#8211; PDF &#8211; English<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=682&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href="https://github.com/andreia/symfony-cheat-sheets/blob/master/Symfony2/routing_en.pdf?raw=true"><img src="http://andreiabohner.files.wordpress.com/2013/04/rot.jpg?w=640" alt="routing"   class="alignnone size-full wp-image-683" /></a></p>
<ul>
<li><a href="https://github.com/andreia/symfony-cheat-sheets/blob/master/Symfony2/routing_en.pdf?raw=true" title="Routing">Routing &#8211; PDF &#8211; English</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/682/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/682/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=682&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2013/04/13/symfony2-cheat-sheet-routing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>

		<media:content url="http://andreiabohner.files.wordpress.com/2013/04/rot.jpg" medium="image">
			<media:title type="html">routing</media:title>
		</media:content>
	</item>
		<item>
		<title>Utilizando funções de um banco de dados específico com o Doctrine2 e o Symfony2</title>
		<link>http://andreiabohner.wordpress.com/2013/03/27/utilizando-funcoes-de-um-banco-de-dados-especifico-com-o-doctrine2-e-o-symfony2/</link>
		<comments>http://andreiabohner.wordpress.com/2013/03/27/utilizando-funcoes-de-um-banco-de-dados-especifico-com-o-doctrine2-e-o-symfony2/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 00:09:08 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[doctrine]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[doctrine2]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=631</guid>
		<description><![CDATA[Um dos ganhos de performance do Doctrine2 é devido a sua DQL conter apenas as funções que são comuns a todos os bancos de dados. Para utilizarmos funções específicas de cada banco de dados (por exemplo, a função IFNULL do MySQL ou a função NVL do Oracle), o Doctrine nos permite adicioná-las através de extensões. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=631&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Um dos ganhos de performance do Doctrine2 é devido a sua DQL conter apenas as funções que são comuns a todos os bancos de dados.</p>
<p>Para utilizarmos funções específicas de cada banco de dados (por exemplo, a função <code><a href="http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html#function_ifnull" title="IFNULL function" target="_blank">IFNULL</a></code> do MySQL ou a função <code><a href="http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm" title="NVL function" target="_blank">NVL</a></code> do Oracle), o Doctrine nos permite adicioná-las através de extensões.</p>
<p>Segue aqui um exemplo para adicionar uma função <code>YEAR</code>, que retorna o ano de uma data fornecida, utilizando a função <code>EXTRACT</code> do Oracle:</p>
<p>Primeiro adicione um diretório que irá conter a sua função, por exemplo <code>DoctrineExtensions\Query\Oracle</code>.</p>
<p>Dentro deste diretório vamos criar a classe <code>Year.php</code>, que irá conter a nossa função:</p>
<pre><code>
&lt;php
namespace DoctrineExtensions\Query\Oracle;

use Doctrine\ORM\Query\Lexer,
    Doctrine\ORM\Query\AST\Functions\FunctionNode;

class Year extends FunctionNode
{
    private $date;

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return sprintf(
                'EXTRACT(YEAR FROM %s)',
                $sqlWalker-&gt;walkArithmeticPrimary($this-&gt;date));
    }

    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser-&gt;match(Lexer::T_IDENTIFIER);
        $parser-&gt;match(Lexer::T_OPEN_PARENTHESIS);
        $this-&gt;date = $parser-&gt;ArithmeticPrimary();
        $parser-&gt;match(Lexer::T_CLOSE_PARENTHESIS);
    }
}
</pre>
<p></code></p>
<p>A classe <code>Year</code> deve estender a classe <code>FunctionNode</code>, que requer que sejam implementados dois métodos: <code>getSql</code> e <code>parse</code>. Informações mais detalhadas podem ser encontradas no artigo do cookbook do Doctrine "<a href="http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html" title="DQL user defined functions" target="_blank">DQL user defined functions</a>"</p>
<h1>Registrando a função</h1>
<p>Agora, só precisamos disponibilizar a função <code>YEAR</code> ao DQL do Doctrine. Para isso, é necessário registrá-la, através das configurações do Doctrine no arquivo <code>app/config/config.yml</code>, sob a chave dql. Logo abaixo da chave dql, você deve definir a chave do tipo da sua função, que pode ser: <code>string_functions</code>, <code>numeric_functions</code> ou <code>datetime_functions</code>. Em seguida, vem a chave com o nome da sua função e a localização da respectiva classe:</p>
<pre><code>
# Doctrine Configuration
doctrine:
  orm:
    dql:
      datetime_functions:
        year: DoctrineExtensions\Query\Oracle\Year
</code>
</pre>
<p>Dica: Antes de escrever a sua função, verifique se ela já existe no repo <a href="https://github.com/beberlei/DoctrineExtensions" title="Doctrine Extensions" target="_blank">DoctrineExtensions</a>, que contém uma coleção de funções, com várias contribuições.</p>
<h1>Mais sobre</h1>
<ul>
<li><a href="http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html" title="How to register custom DQL functions" target="_blank">How to Register Custom DQL Functions</a></li>
<li><a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/Parser.php" title="Classe Parser" target="_blank">Classe Parser</a></li>
<li><a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/Lexer.php" title="Classe Lexer" target="_blank">Classe Lexer</a></li>
<li><a href="https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/SqlWalker.php" title="SqlWalker" target="_blank">Classe SqlWalker</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=631&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2013/03/27/utilizando-funcoes-de-um-banco-de-dados-especifico-com-o-doctrine2-e-o-symfony2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>O que mudou na versão 2.2 do Symfony</title>
		<link>http://andreiabohner.wordpress.com/2013/03/07/o-que-mudou-na-versao-2-2-do-symfony/</link>
		<comments>http://andreiabohner.wordpress.com/2013/03/07/o-que-mudou-na-versao-2-2-do-symfony/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 03:10:05 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=533</guid>
		<description><![CDATA[Na sexta-feira passada (01/03), foi lançada a versão 2.2 do Symfony, que inclui várias funcionalidades e melhorias, que estavam sendo anunciadas semanalmente no blog oficial. Confira aqui um resumo de algumas das novas funcionalidades disponíveis: Console Autocompletar na linha de comando: mais uma melhoria para agilizar o desenvolvimento! Agora usando tab e as setas podemos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=533&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Na sexta-feira passada (01/03), foi lançada a versão 2.2 do Symfony, que inclui várias funcionalidades e melhorias, que estavam sendo <a href="http://symfony.com/blog/symfony-2-2-0" title="Symfony 2.2.0" target="_blank">anunciadas semanalmente no blog oficial</a>. Confira aqui um resumo de algumas das novas funcionalidades disponíveis:</p>
<h1><a title="Console" href="https://plus.google.com/112826259967037204070/posts/C6ofqCPHkN2" target="_blank">Console</a></h1>
<p><strong>Autocompletar na linha de comando:</strong> mais uma melhoria para agilizar o desenvolvimento! Agora usando tab e as setas podemos selecionar a resposta rapidamente e sem erros. Você pode passar todas as respostas válidas para o seu comando como último argumento do método askAndValidate():<br />
<small>
<pre><code>use Symfony\Component\Console\Application;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

$app = new Application();
$app-&gt;register('ask-color')-&gt;setCode(function (InputInterface $input,
   OutputInterface $output) use ($app) {
   $colors = array(
              'red', 'blue', 'yellow', 'yellow-light', 'yellow-dark'
             );
   $validation = function ($color) use ($colors) {
       if (!in_array($color, array_values($colors))) {
           throw new \InvalidArgumentException(sprintf(
                         'Color "%s" is invalid.', $color));
       }

       return $color;
   };

   // pergunta e valida a resposta
   $dialog = $app-&gt;getHelperSet()-&gt;get('dialog');
   $color = $dialog-&gt;askAndValidate($output, 
                        'Enter your favorite color (default to red): ', 
                        $validation, false, 'red', $colors);

   $output-&gt;writeln(sprintf('You have just entered: %s', $color));
});

$app-&gt;run();
</code></pre>
<p></small></p>
<p>O funcionamento do comando, pode ser verificado <a href="http://www.youtube.com/watch?v=Z_lkGURbZ0g">neste vídeo</a>.</p>
<p><strong>Exibição de uma barra de progresso para as tarefas de longa execução:</strong> ao executar comandos de longa duração pela CLI, podemos fornecer um feedback ao usuário, durante a execução do comando, através de um helper de barra de progresso que faz todo o trabalho para você:<br />
<small>
<pre><code>$progress = $app-&gt;getHelperSet()-&gt;get('progress');

$progress-&gt;start($output, 50);
$i = 0;
while ($i++ &lt; 50) {     
    // faz algo     
    // avança a barra de progresso em 1 unidade     
    $progress-&gt;advance();
}

$progress-&gt;finish();
</code></pre>
<p></small></p>
<p><strong>Escondendo as senhas fornecidas na linha de comando:</strong> o novo método askHiddenResponse nos permite esconder o que os usuários digitam na linha de comando:<br />
<small>
<pre><code>$dialog      = $this-&gt;getHelperSet()-&gt;get('dialog');
$password = $dialog-&gt;askHiddenResponse($output, 'Qual é a senha do banco de dados?');</code></pre>
<p></small></p>
<p><strong>Restringindo as opções solicitadas ao usuário:</strong> há várias formas de pedir algumas informações na CLI. A partir do Symfony 2.2, podemos restringir o que o usuário pode informar através do novo helper select(), fazendo com que ele escolha a partir de uma lista de opções. </p>
<h1><a title="Melhorias no Finder" href="https://plus.google.com/102235851404779991027/posts/7sjifviEUEq" target="_blank">Finder</a></h1>
<p>O <a href="http://symfony.com/doc/master/components/finder.html" target="_blank">componente Finder</a> oferece uma agradável DSL para pesquisar arquivos e diretórios. As seguintes melhorias estão disponíveis com a versão 2.2:</p>
<p><strong>Filtro por caminho:</strong> com o método <code>path()</code>, que aceita strings ou expressões regulares, agora é possível restringir arquivos e diretórios pelo caminho:<br />
<small><code>Finder::create()-&gt;path('some/special/dir');<br />
Finder::create()-&gt;path('/^foo\/bar/');<br />
</code></small></p>
<p>Para negar a restrição, utilize os métodos <code>notName()</code> e <code>notPath()</code>.</p>
<p><strong>Suporte a Glob no método <code>in()</code>:</strong> os diretórios onde o Finder deve procurar por arquivos e diretórios podem ser definidos como <code>globs </code>no método <code>in()</code>:<br />
<small>
<pre><code>Finder::create()-&gt;files()-&gt;in(
           'src/Symfony/*/*/Resources/translations');</code></pre>
<p></small></p>
<p><strong>Aumento de velocidade em algumas Plataformas (Linux, MacOs e BSD):</strong> o desempenho do Finder foi muito melhorado, através da conversão dos critérios para comandos nativos. Verifique os <a title="Benchmark" href="https://gist.github.com/jfsimon/3230139" target="_blank">resultados iniciais do benchmark</a> que foram publicados quando o PR foi submetido.</p>
<h1>HttpKernel</h1>
<p><strong><a href="https://plus.google.com/102235851404779991027/posts/QfYssmCVyjR">Log das chamadas obsoletas:</a></strong> A primeira versão LTS do Symfony2 será a 2.3 (a ser lançada em Maio de 2013)  após estão versão, não serão mais realizadas quebras de compatibilidade com as versões anteriores sem uma razão muito boa (ex. uma questão de segurança). Assim, desde a versão 2.0, em vez de apenas substituir ou remover as funcionalidades existentes, elas passam a ser definidas como obsoletas, e serão removidas definitivamente na versão 2.3.</p>
<p>Para fornecer uma transição mais suave, o Symfony 2.2 apresenta um novo recurso: o log das chamadas obsoletas. Sempre que você chamar um método obsoleto ou quando criar uma instância de uma classe obsoleta, o Symfony vai fazer o log da chamada e alertá-lo na barra de ferramentas de depuração. Também é possível verificar exatamente onde a chamada ocorreu no painel de log do profiler web.</p>
<p><strong>Novo sub-framework para gerenciar fragmentos de recursos</strong>: um novo sub-framework foi adicionado para lidar com a renderização de fragmentos de recursos e facilitar o uso de diferentes estratégias: sub-requests internos (processados diretamente pelo Symfony), ESIs (processados por um proxy reverso &#8211; Varnish, &#8230;), HIncludes (processados pelo navegador) e SSIs ( processandos pelo servidor web &#8211; Apache, &#8230; &#8211; somente no Symfony 2.3). O componente HttpKernel pode lidar agora com sub-requests <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Exibição agradável dos erros fatais:</strong> os erros fatais são exibidos de uma forma agradável como os outros erros.</p>
<p>Erro fatal no Symfony 2.1:</p>
<p><img src="http://symfony.com/uploads/assets/fatal_error_before.png" width="100%" /></p>
<p>Mensagem de erro fatal melhorada no Symfony 2.2:</p>
<p><img src="http://symfony.com/uploads/assets/fatal_error_after.png" width="100%" /></p>
<h1>Componente Process</h1>
<p>O componente Process permite a execução de sub-processos em PHP, tanto na forma de bloqueio (próximo processo espera a finalização do processo anterior para executar) como sem bloqueio (processos são executados simultaneamente). Ele também ganhou melhorias na nova versão do Symfony:</p>
<p><strong>Obtenção de saída incremental de um Processo:</strong> você pode obter os dados de saída incrementais usando os métodos getIncrementalOutput() e getIncrementalErrorOutput(), que retornam as novas saídas desde a última chamada enquanto getOutput() e getErrorOutput() retornam os resultados completos:<br />
<small>
<pre><code>use Symfony\Component\Process\Process;

$processes = array();
$processes[] = new Process('ls -lsa');
$processes[] = new Process('ps waux');

while (count($processes) &gt; 0) {
     foreach ($processes as $i =&gt; $process) {
         if (!$process-&gt;isStarted()) {
             echo "Process starts\n";

             $process-&gt;start();

             continue;
         }

         echo $process-&gt;getIncrementalOutput();
         echo $process-&gt;getIncrementalErrorOutput();

         if (!$process-&gt;isRunning()) {
             echo "Process stopped\n";

             unset($processes[$i]);
         }
     }

     sleep(1);
}
</code></pre>
<p></small></p>
<p><strong>Reiniciar um processo:</strong> podemos agora reiniciar um processo, por exemplo, no caso dele falhar:<br />
<small>
<pre><code>use Symfony\Component\Process\ProcessBuilder;

if (!$process-&gt;isRunning()) {
    if (!$process-&gt;isSuccessful()) {
        $cloned = $process-&gt;restart();

        // ...
    }
}
</code></pre>
<p></small></p>
<p><strong>Obter o status de um processo em execução: </strong>ao executar um conjunto de processos, você pode querer reiniciar processos que morreram (como no exemplo anterior). Mas se o processo ainda não é capaz de iniciar, não há motivo para reiniciá-lo. A partir da versão 2.2, você pode verificar o status de um processo e agir em conformidade:<br />
<small>
<pre><code>$process-&gt;isSuccessful();
$process-&gt;hasBeenSignaled();
$process-&gt;hasBeenStopped();
$process-&gt;isRunning();

// novidade no Symfony 2.2:
$process-&gt;isStarted();
$process-&gt;isTerminated();

if (!$process-&gt;isRunning()) {
    if ($process-&gt;isStarted() &amp;&amp; !$process-&gt;isSuccessful()) {
        $cloned = $process-&gt;restart();

        // ...
    }
}
</code></pre>
<p></small></p>
<h1>Roteamento</h1>
<p><strong>Suporte para host na URL:</strong> as rotas contam agora com <a href="http://symfony.com/doc/master/components/routing/hostname_pattern.html" title="Suporte para URL nas rotas" target="_blank">suporte nativo à host na URL</a>. A constraint do host funciona exatamente da mesma forma como o padrão: ela pode conter placeholders, os placeholders podem ter requisitos, e um requisito do placeholder pode usar algum parâmetro do container de serviço para ser configurado.</p>
<p>Exemplo típico de uso:<br />
<small>
<pre><code>user_homepage:
    path: /
    host: "{user}.example.com"
    defaults: { _controller: AcmeDemoBundle:User:profile }

main_homepage:
    path:  /
    defaults: { _controller: AcmeDemoBundle:Main:homepage }
</code></pre>
<p></small></p>
<p>A constraint do host também pode ser adicionada a um conjunto de rotas ao importá-las.</p>
<p><strong>URLs relativas ao esquema e ao caminho:</strong> foram adicionados mais dois tipos de URLs que você gerar:</p>
<p>URLs relativas ao esquema: usado quando algumas páginas são acessadas por HTTP ou HTTPS, evitando as warnings dos navegadores.<br />
<small><code>//example.org/blog/what-a-wonderful-world </p>
<p>{{ url('blog', { post: 'what-a-wonderful-world' }, true) }}<br />
</code></small></p>
<p>URLs relativas ao caminho: útil quando você precisa gerar arquivos HTML estáticos que podem ser baixados para serem acessados localmente em um navegador (ex: gerador de blog estático)<br />
<small><code>../ (caminho relativo com base na URL atual)</p>
<p>{{ path('blog', { post: 'what-a-wonderful-world' }, true) }}</code></small></p>
<h1><a href="https://plus.google.com/102235851404779991027/posts/e586SpkaKkJ">Segurança</a></h1>
<p><strong><a href="http://symfony.com/doc/master/book/security.html#utilities" title="Utilitários de Segurança" target="_blank">Utilitários de Segurança:</a></strong> alguns utilitários de segurança foram refatorados para que você possa usá-los em seu próprio código. Estes utilitários estão disponíveis no namespace <code>Symfony\Component\Security\Core\Util</code>.</p>
<p><strong>Geração de um número aleatório seguro:</strong> temos a disposição uma implementação robusta para a geração de um número aleatório, com a classe <code>SecureRandom</code>:<br />
<small>
<pre><code>use Symfony\Component\Security\Core\Util\SecureRandom;

$generator = new SecureRandom();
$random    = $generator-&gt;nextBytes(10);
</code></pre>
<p></small></p>
<p>O método nextBytes() retorna uma string aleatória composta pelo número de caracteres passados ​​como argumento (10 no exemplo acima).</p>
<p><strong>Comparando Strings:</strong> <a href="http://en.wikipedia.org/wiki/Timing_attack" title="Timing attacks" target="_blank">Timing attacks</a> ainda não são bem conhecidos, mas mesmo assim, o Symfony possui proteção contra eles. No Symfony 2.0 e 2.1, esta proteção foi aplicada para comparações de senha feitas no bundle Security, mas, a partir do Symfony 2.2, também está disponível para o desenvolvedor:<br />
<small><code>use Symfony\Component\Security\Core\Util\StringUtils;</p>
<p>// a senha1 é igual a senha2?<br />
$bool = StringUtils::equals($senha1, $senha2);</code></small></p>
<h1>Validadores</h1>
<p><strong>Validadores para pagamento:</strong> adicionado novo validador para cartões de crédito, utilizando o <a href="http://symfony.com/doc/master/reference/constraints/Luhn.html">algoritmo Luhn</a>:<br />
<small>
<pre><code>// src/Acme/SubscriptionBundle/Entity/Transaction.php

use Symfony\Component\Validator\Constraints as Assert;

class Transaction{
    /**
     * @Assert\Luhn(message = "Por favor verifique o número do cartão fornecido.")
     */
    protected $cardNumber;
}
</code></pre>
<p></small></p>
<p>É possível também verificar se um cartão é válido para uma determinada companhia de cartão de crédito com a constraint <a href="http://symfony.com/doc/current/reference/constraints/CardScheme.html">CardSchemeValidator</a>:<br />
<small>
<pre><code>// src/Acme/SubscriptionBundle/Resources/config/validation.yml

Acme\SubscriptionBundle\Entity\Transaction:
    properties:
        cardNumber:
            - CardScheme:
                schemes: [VISA]
                message: O número do cartão de crédito é inválido.
</code></pre>
<p></small></p>
<h1>FrameworkBundle</h1>
<p><strong>Mais velocidade nos testes funcionais: </strong>agora o profiler é desabilitado por padrão nos testes funcionais (na configuração que vem com a Edição Standard):<br />
<small>
<pre><code># in app/config/config_test.yml
framework:
    profiler:
        enabled: false
</code></pre>
<p></small></p>
<p><strong>Cache para páginas estáticas:</strong> todos os sites possuem algum tipo de página estática  (por exemplo, uma página sobre). Uma página é estática quando não precisa que nenhuma lógica seja processada. Para facilitar neste caso (e evitar ter que criar um controlador e roteamentos para estas páginas), você pode usar o controlador <code>FrameworkBundle:Template:template</code> que configura tudo, diretamente no arquivo de roteamento. Isto funciona desde a versão 2.0, mas na 2.2, você pode definir também a estratégia de cache:<br />
<small>
<pre><code>about:
    pattern: /sobre
    defaults:
        _controller: FrameworkBundle:Template:template
        template: 'AcmeBundle:Pages:sobre.html.twig'
        maxAge: 86400
        sharedMaxAge: 86400
        private: false
</code></pre>
<p></small></p>
<h1>Novos componentes</h1>
<p>Contamos agora com dois novos componentes (que foram extraídos do código existente):</p>
<ul>
<li><a title="StopWatch" href="http://symfony.com/blog/new-in-symfony-2-2-new-stopwatch-component" target="_blank">Stopwatch</a> &#8211; permite medir o tempo de execução de partes específicas do seu código</li>
<li><a title="PropertyAccess " href="http://symfony.com/blog/new-in-symfony-2-2-new-propertyaccess-component" target="_blank">PropertyAccess</a> &#8211; função para ler e escrever de/para um array ou objeto utilizando uma notação simples de string</li>
</ul>
<h1>Mais Documentação</h1>
<p>Foram <a title="Documentação Symfony 2.2" href="http://symfony.com/blog/new-in-symfony-2-2-more-documentation" target="_blank">adicionados vários artigos na documentação oficial</a> sobre as novas funcionalidades.</p>
<h1>Migração da versão 2.1</h1>
<p>Se você possui projetos utilizando a versão 2.1, para fazer a migração para a 2.2 deve-se <a href="https://gist.github.com/andreia/5107367" target="_blank">atualizar o arquivo composer.json e executar o composer.phar update</a>.</p>
<p>Após a atualização, verificar com cuidado as modificações citadas <a title="Atualização do Symfony 2.1 para o 2.2" href="https://github.com/symfony/symfony/blob/2.2/UPGRADE-2.2.md" target="_blank">neste documento</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/533/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/533/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=533&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2013/03/07/o-que-mudou-na-versao-2-2-do-symfony/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>

		<media:content url="http://symfony.com/uploads/assets/fatal_error_before.png" medium="image" />

		<media:content url="http://symfony.com/uploads/assets/fatal_error_after.png" medium="image" />
	</item>
		<item>
		<title>Form Events in Symfony 2.1</title>
		<link>http://andreiabohner.wordpress.com/2012/11/04/form-events-in-symfony-2-1/</link>
		<comments>http://andreiabohner.wordpress.com/2012/11/04/form-events-in-symfony-2-1/#comments</comments>
		<pubDate>Sun, 04 Nov 2012 19:42:47 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony2]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[form]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=516</guid>
		<description><![CDATA[Form Events &#8211; [PDF] &#8211; English<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=516&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><img src="http://andreiabohner.files.wordpress.com/2012/11/symfonyevents12.png?w=640"   class="alignnone size-full wp-image-525" /></p>
<p>Form Events &#8211; <a href='http://andreiabohner.files.wordpress.com/2012/11/form_events_v13.pdf' title="Form Events in Symfony 2.1 - [PDF] - English">[PDF] &#8211; English</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/516/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/516/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=516&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2012/11/04/form-events-in-symfony-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>

		<media:content url="http://andreiabohner.files.wordpress.com/2012/11/symfonyevents12.png" medium="image" />
	</item>
		<item>
		<title>Symfony2 Cheat-Sheet: Console (CLI)</title>
		<link>http://andreiabohner.wordpress.com/2012/09/02/symfony2-cheat-sheet-console-cli/</link>
		<comments>http://andreiabohner.wordpress.com/2012/09/02/symfony2-cheat-sheet-console-cli/#comments</comments>
		<pubDate>Sun, 02 Sep 2012 18:06:20 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[cli]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[console]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=483</guid>
		<description><![CDATA[A interface de linha de comando ou console do Symfony2 também é um componente, que pode ser usado separadamente, e facilita a criação da sua própria interface de linha de comando. A referência a seguir é sobre os comandos que vem juntamente com o Framework Symfony2 e com alguns bundles que são usados frequentemente ( [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=483&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>A interface de linha de comando ou <strong>console </strong>do Symfony2 também é um <a href="http://symfony.com/doc/current/components/console.html" title="Componente Console do Symfony2">componente, que pode ser usado separadamente</a>, e facilita a criação da sua própria interface de linha de comando. </p>
<p>A referência a seguir é sobre os comandos que vem juntamente com o <a href="https://github.com/symfony/FrameworkBundle" title="Framework Bundle">Framework Symfony2</a> e com alguns bundles que são usados frequentemente ( <a href="https://github.com/symfony/SwiftmailerBundle" title="Swiftmailer Bundle">SwiftmailerBundle</a> &#8211; <a href="https://github.com/symfony/TwigBundle" title="Twig Bundle">TwigBundle</a> &#8211; <a href="https://github.com/symfony/AsseticBundle" title="Assetic Bundle">AsseticBundle</a> &#8211; <a href="https://github.com/FriendsOfSymfony/FOSJsRoutingBundle" title="FOS JsRouting Bundle">FOSJsRoutingBundle</a> &#8211; <a href="https://github.com/FriendsOfSymfony/FOSUserBundle" title="FOS User Bundle">FOSUserBundle</a> &#8211; <a href="https://github.com/doctrine/DoctrineBundle" title="Doctrine Bundle ">DoctrineBundle</a> &#8211; <a href="https://github.com/symfony/SecurityBundle" title="Security Bundle">SecurityBundle</a> &#8211; <a href="https://github.com/doctrine/DoctrineFixturesBundle" title="Doctrine Fixtures Bundle">DoctrineFixturesBundle</a> ):</p>
<ul>
<li><a href='http://andreiabohner.files.wordpress.com/2012/09/console_pt_br_v1-1.pdf'>Console (CLI) &#8211; PDF &#8211; Português</a></li>
<li><a href='http://andreiabohner.files.wordpress.com/2012/09/console_en_v1-1.pdf'>Console (CLI) &#8211; PDF &#8211; English</a></li>
</ul>
<p>Mais informações:</p>
<ul>
<li><a href="http://symfony.com/doc/current/cookbook/console/console_command.html" title="Como criar um comando">Como criar um comando</a> </li>
<li>O Componente Console &#8211; <a href="http://symfony.com/doc/current/components/console.html" title="O Componente Console - Inglês">[em inglês]</a>  <a href="http://andreiabohner.org/symfony2docs/components/console.html" title="O Componente Console - Português">[em português]</a></li>
</ul>
<p><strong>Atualização em 06/09/2012:</strong> Adicionada informação do bundle ao qual o comando pertence e adicionados os comandos dos bundles: FOSUserBundle e DoctrineFixturesBundle. As versões anteriores encontram-se aqui: <a href='http://andreiabohner.files.wordpress.com/2012/09/console_en.pdf'>[English]</a> e <a href='http://andreiabohner.files.wordpress.com/2012/09/console_pt_br.pdf'>[Português]</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/483/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=483&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2012/09/02/symfony2-cheat-sheet-console-cli/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>Adicionando um novo filtro em seus templates Twig</title>
		<link>http://andreiabohner.wordpress.com/2012/08/28/adicionando-um-novo-filtro-em-seus-templates-twig/</link>
		<comments>http://andreiabohner.wordpress.com/2012/08/28/adicionando-um-novo-filtro-em-seus-templates-twig/#comments</comments>
		<pubDate>Tue, 28 Aug 2012 22:06:19 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[filtros]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[twig]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=428</guid>
		<description><![CDATA[Adicionar um novo filtro aos seus templates Twig utilizando o Symfony2 é uma tarefa bastante simples, que veremos a seguir, com um exemplo que adiciona um novo filtro unserialize &#8211; usando a função PHP com o mesmo nome. Primeiro, vamos criar uma classe para a nossa nova extensão do Twig, que irá conter o nosso [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=428&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Adicionar um novo filtro aos seus templates Twig utilizando o Symfony2 é uma tarefa bastante simples, que veremos a seguir, com um exemplo que adiciona um novo filtro <code>unserialize</code> &#8211; usando a função PHP com o mesmo nome.</p>
<p>Primeiro, vamos criar uma classe para a nossa nova extensão do Twig, que irá conter o nosso filtro. Para facilitar, podemos estender a classe <code>Twig_Extension</code>, ao invés de implementar a interface <code>Twig_ExtensionInterface</code>, pois esta classe já irá definir todos os métodos para nós, então, não precisamos definir todos novamente, mas somente os que nos interessam ( neste exemplo: <code>getFilters()</code> e <code>getName()</code> ).</p>
<p>A extensão poderá ser salva em qualquer local, neste exemplo iremos salvar em <code>\Extension\Twig</code> dentro do bundle <code>TesteBundle</code> (assumindo que este bundle já foi previamente criado). </p>
<pre>
<code>
\\ Acme\TesteBundle\Extension\Twig\UnserializeTwigExtension.php

&lt;?php  

namespace Acme\TesteBundle\Extension\Twig;

use Symfony\Component\HttpKernel\KernelInterface;

class UnserializeTwigExtension extends \Twig_Extension  
{
  public function getFilters()  
  {
    return array(  
       'unserialize' =&gt; new \Twig_Filter_Function('unserialize'),  
    );  
  }  

  public function getName()  
  {  
    return 'unserialize_twig_extension';  
  }  
}
</code>
</pre>
<p>O método <code>getName()</code> deverá retornar um identificador único para a nossa extensão.</p>
<p>No arquivo de configuração <code>config.yml</code> (<code>app/config/config.yml</code>) vamos definir um novo serviço para a classe <code>UnserializeTwigExtension</code>:</p>
<pre>
<code>
services:
  teste.twig.extension.unserializetwigextension:
    class: Acme\TesteBundle\Extension\Twig\UnserializeTwigExtension
    tags:
      -  { name: twig.extension }
</code>
</pre>
<p>Ao aplicarmos a tag para injeção de dependência (DI &#8211; Dependency Injection) <a href="http://symfony.com/doc/current/reference/dic_tags.html#twig-extension" title="twig.extension"><code>twig.extension</code></a> em nosso serviço, estamos informando que nossa classe é uma extensão do Twig personalizada e, também, habilitamos ela. </p>
<p>Pronto! Agora podemos chamar nosso novo filtro <code>unserialize</code> em qualquer template Twig:</p>
<pre>
<code>
# Acme\TesteBundle\Resources\views\Default\index.html.twig
{{ app.session.get('myvar')|unserialize }} 
</code>
</pre>
<p>Para mais informações sobre como estender o Twig criando um novo filtro, tag ou função, verifique a documentação em: <a href="http://twig.sensiolabs.org/doc/advanced.html" title="Estendendo o Twig">http://twig.sensiolabs.org/doc/advanced.html</a></p>
<p>Até mais <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/428/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/428/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=428&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2012/08/28/adicionando-um-novo-filtro-em-seus-templates-twig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>Utilizando o roteamento do Symfony2 para gerar as URLs em seus JavaScripts</title>
		<link>http://andreiabohner.wordpress.com/2012/08/08/utilizando-o-roteamento-do-symfony2-para-gerar-as-urls-em-seus-javascripts/</link>
		<comments>http://andreiabohner.wordpress.com/2012/08/08/utilizando-o-roteamento-do-symfony2-para-gerar-as-urls-em-seus-javascripts/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 03:10:55 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony2]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=404</guid>
		<description><![CDATA[Ao desenvolvermos aplicações web nos deparamos com a situação de qual será a melhor forma de escrever as URLs em nossos scripts e funções JavaScript, quando utilizamos, por exemplo, requisições ajax. Para simplificar esta tarefa, temos o FOSJsRoutingBundle, criado por William DURAND, que utiliza as próprias regras de roteamento configuradas na sua aplicação desenvolvida com [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=404&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ao desenvolvermos aplicações web nos deparamos com a situação de qual será a melhor forma de escrever as URLs em nossos scripts e funções JavaScript, quando utilizamos, por exemplo, requisições ajax.</p>
<p>Para simplificar esta tarefa, temos o <a href="https://github.com/FriendsOfSymfony/FOSJsRoutingBundle" title="FOSJsRoutingBundle">FOSJsRoutingBundle</a>, criado por <a href="http://twitter.com/couac" title="William DURAND">William DURAND</a>, que utiliza as próprias regras de roteamento configuradas na sua aplicação desenvolvida com o Symfony2. </p>
<p>Um exemplo de utilização bem simples:</p>
<p>Definimos a nossa rota no arquivo de configuração do roteamento (routing.yml):</p>
<pre>
<code>
# app/config/routing.yml
pessoa_local:
    pattern:  /pessoa/local
    defaults:  { _controller: MyBundle:Pessoa:local }
    options:
        expose: true
</code>
</pre>
<p><strong>Importante:</strong> a opção <code>expose</code> deve ser definida como <code>true</code></p>
<p>No layout, chamamos as bibliotecas JS para gerar as URLs:</p>
<pre>
<code>
&lt;script type="text/javascript" 
    src="{{ asset('bundles/fosjsrouting/js/router.js') }}"&gt;
&lt;/script&gt;
&lt;script type="text/javascript" 
    src="{{ path('fos_js_routing_js', 
         {"callback": "fos.Router.setData"}) }}"&gt;
&lt;/script&gt;
</code>
</pre>
<p>Em nosso JS, geramos a URL definida na rota chamando <code>Routing.generate('id_da_rota', parametros)</code>:</p>
<pre>
<code>
  $(document).ready(function(){
	var url = Routing.generate('pessoa_local');
        $("#frm").relatedSelects({
            onChangeLoad: url,
            loadingMessage: 'Carregando, favor aguarde...',
            selects: ['pessoa[pais_id]', 
                      'pessoa[uf_id]', 
                      'pessoa[municipio_id]'],
            disableIfEmpty:true,
            onEmptyResult: function(){
                alert('Não existem opções disponíveis para ' +
                      $(this).find('option:selected').text() + 
                      '!');
            }
        });
});
</code>
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/404/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/404/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=404&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2012/08/08/utilizando-o-roteamento-do-symfony2-para-gerar-as-urls-em-seus-javascripts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabalhando com Formulários no Symfony2</title>
		<link>http://andreiabohner.wordpress.com/2012/01/14/trabalhando-com-formularios-no-symfony2/</link>
		<comments>http://andreiabohner.wordpress.com/2012/01/14/trabalhando-com-formularios-no-symfony2/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 20:40:28 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=377</guid>
		<description><![CDATA[Complementando o post anterior &#8220;Como Funcionam os Formulários no Symfony2?&#8220;, esta referência mostra, de maneira simplificada, as três possíveis formas de se trabalhar com o Componente de Formulários no Symfony2. São elas: 1. Diretamente no controlador (simples e fácil) 2. Criando uma classe independente para o formulário (melhor prática, pois é reutilizável) 3. Usando um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=377&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Complementando o post anterior &#8220;<a href="http://andreiabohner.wordpress.com/2011/10/17/como-funcionam-os-formularios-no-symfony2/" title="Como Funcionam os Formulários no Symfony?">Como Funcionam os Formulários no Symfony2?</a>&#8220;, esta referência mostra, de maneira simplificada, as<br />
três possíveis formas de se trabalhar com o Componente de Formulários no Symfony2. </p>
<p>São elas:</p>
<p>1. Diretamente no controlador (simples e fácil)<br />
2. Criando uma classe independente para o formulário (melhor prática, pois é reutilizável)<br />
3. Usando um formulário sem uma classe de dados</p>
<p>Seguem as referências em português e inglês:</p>
<ul>
<li><a href='http://andreiabohner.files.wordpress.com/2012/01/working-with-symfony2-forms-pt2.pdf'>Trabalhando com Formulários no Symfony2 &#8211; [Português][PDF]</a></li>
<li><a href='http://andreiabohner.files.wordpress.com/2012/01/working-with-symfony2-forms-en3.pdf'>Working with Symfony2 Forms &#8211; [English][PDF]</a></li>
</ul>
<p>Aproveite <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=377&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2012/01/14/trabalhando-com-formularios-no-symfony2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>Como Funcionam os Formulários no Symfony2?</title>
		<link>http://andreiabohner.wordpress.com/2011/10/17/como-funcionam-os-formularios-no-symfony2/</link>
		<comments>http://andreiabohner.wordpress.com/2011/10/17/como-funcionam-os-formularios-no-symfony2/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 00:06:43 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony2]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=367</guid>
		<description><![CDATA[Esquema visual do funcionamento básico do Componente de Formulários do Symfony2. Como Funcionam os Formulários no Symfony2? [Português] How Symfony2 Forms Works? [English]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=367&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Esquema visual do funcionamento básico do Componente de Formulários do Symfony2.</p>
<ul>
<li><a href='http://andreiabohner.files.wordpress.com/2011/10/como_funcionam_forms_symfony2.pdf'>Como Funcionam os Formulários no Symfony2? [Português]</a></li>
<li><a href='http://andreiabohner.files.wordpress.com/2011/10/how_symfony2_forms_works.pdf'>How Symfony2 Forms Works? [English]</a></li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/367/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/367/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=367&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2011/10/17/como-funcionam-os-formularios-no-symfony2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>
	</item>
		<item>
		<title>Symfony2 Cheat-Sheet: Forms</title>
		<link>http://andreiabohner.wordpress.com/2011/04/13/symfony2-cheat-sheet-forms/</link>
		<comments>http://andreiabohner.wordpress.com/2011/04/13/symfony2-cheat-sheet-forms/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 01:35:17 +0000</pubDate>
		<dc:creator>Andréia Bohner</dc:creator>
				<category><![CDATA[symfony]]></category>
		<category><![CDATA[symfony2]]></category>
		<category><![CDATA[cheat sheet]]></category>
		<category><![CDATA[forms]]></category>

		<guid isPermaLink="false">http://andreiabohner.wordpress.com/?p=356</guid>
		<description><![CDATA[Symfony2 Cheat-Sheet: Forms &#8211; [PDF] &#8211; English Official documentation about the form component: http://symfony.com/doc/2.0/book/forms/index.html<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=356&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p><a href='http://andreiabohner.files.wordpress.com/2011/04/forms.pdf'><img src="http://andreiabohner.files.wordpress.com/2011/04/sf2cs.jpg?w=640" alt="" title="Symfony2 Forms"   class="alignnone size-full wp-image-359" /></a><br />
Symfony2 Cheat-Sheet: Forms &#8211; <a href='http://andreiabohner.files.wordpress.com/2011/04/forms.pdf'>[PDF] &#8211; English</a></p>
<p>Official documentation about the form component: <a href="http://symfony.com/doc/2.0/book/forms/index.html">http://symfony.com/doc/2.0/book/forms/index.html</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/andreiabohner.wordpress.com/356/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/andreiabohner.wordpress.com/356/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=andreiabohner.wordpress.com&#038;blog=394364&#038;post=356&#038;subd=andreiabohner&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://andreiabohner.wordpress.com/2011/04/13/symfony2-cheat-sheet-forms/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1584ed901fd1cfe1aba51564166e5e32?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Andréia Bohner</media:title>
		</media:content>

		<media:content url="http://andreiabohner.files.wordpress.com/2011/04/sf2cs.jpg" medium="image">
			<media:title type="html">Symfony2 Forms</media:title>
		</media:content>
	</item>
	</channel>
</rss>
