Symfony2 Cheat-Sheet: Console (CLI)

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 ( SwiftmailerBundleTwigBundleAsseticBundleFOSJsRoutingBundleFOSUserBundleDoctrineBundleSecurityBundleDoctrineFixturesBundle ):

Mais informações:

Atualização em 06/09/2012: 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: [English] e [Português]

Anúncios

Adicionando um novo filtro em seus templates Twig

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 – 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 filtro. Para facilitar, podemos estender a classe Twig_Extension, ao invés de implementar a interface Twig_ExtensionInterface, 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: getFilters() e getName() ).

A extensão poderá ser salva em qualquer local, neste exemplo iremos salvar em \Extension\Twig dentro do bundle TesteBundle (assumindo que este bundle já foi previamente criado).


\\ Acme\TesteBundle\Extension\Twig\UnserializeTwigExtension.php

<?php  

namespace Acme\TesteBundle\Extension\Twig;

use Symfony\Component\HttpKernel\KernelInterface;

class UnserializeTwigExtension extends \Twig_Extension  
{
  public function getFilters()  
  {
    return array(  
       'unserialize' => new \Twig_Filter_Function('unserialize'),  
    );  
  }  

  public function getName()  
  {  
    return 'unserialize_twig_extension';  
  }  
}

O método getName() deverá retornar um identificador único para a nossa extensão.

No arquivo de configuração config.yml (app/config/config.yml) vamos definir um novo serviço para a classe UnserializeTwigExtension:


services:
  teste.twig.extension.unserializetwigextension:
    class: Acme\TesteBundle\Extension\Twig\UnserializeTwigExtension
    tags:
      -  { name: twig.extension }

Ao aplicarmos a tag para injeção de dependência (DI – Dependency Injection) twig.extension em nosso serviço, estamos informando que nossa classe é uma extensão do Twig personalizada e, também, habilitamos ela.

Pronto! Agora podemos chamar nosso novo filtro unserialize em qualquer template Twig:


# Acme\TesteBundle\Resources\views\Default\index.html.twig
{{ app.session.get('myvar')|unserialize }} 

Para mais informações sobre como estender o Twig criando um novo filtro, tag ou função, verifique a documentação em: http://twig.sensiolabs.org/doc/advanced.html

Até mais 😉

Utilizando o roteamento do Symfony2 para gerar as URLs em seus JavaScripts

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 o Symfony2.

Um exemplo de utilização bem simples:

Definimos a nossa rota no arquivo de configuração do roteamento (routing.yml):


# app/config/routing.yml
pessoa_local:
    pattern:  /pessoa/local
    defaults:  { _controller: MyBundle:Pessoa:local }
    options:
        expose: true

Importante: a opção expose deve ser definida como true

No layout, chamamos as bibliotecas JS para gerar as URLs:


<script type="text/javascript" 
    src="{{ asset('bundles/fosjsrouting/js/router.js') }}">
</script>
<script type="text/javascript" 
    src="{{ path('fos_js_routing_js', 
         {"callback": "fos.Router.setData"}) }}">
</script>

Em nosso JS, geramos a URL definida na rota chamando Routing.generate('id_da_rota', parametros):


  $(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() + 
                      '!');
            }
        });
});

Trabalhando com Formulários no Symfony2

Complementando o post anterior “Como Funcionam os Formulários no Symfony2?“, 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 formulário sem uma classe de dados

Seguem as referências em português e inglês:

Aproveite 🙂

Contribuindo com a tradução da documentação oficial do Symfony2

Interessado(a) em contribuir com a tradução da documentação oficial do Symfony2? Seja bem-vindo(a)!

Este post traz as orientações de como proceder e como estamos nos organizando para a tradução dos documentos. A seguinte thread da lista de discussões sobre o symfony tem as informações iniciais, conforme as instruções da página oficial.

No ano passado, traduzimos o livro “Mais com o symfony 1.3 & 1.4” que foi publicado e está a venda na Amazon.

Então, vamos lá! 🙂

Informando os documentos que deseja traduzir

Para melhor organização, primeiro informar o(s) documento(s) que pretende ajudar na tradução e/ou revisão na planilha de tradutores/revisores.

Se ainda não possuir acesso de edição nesta planilha, solicitar acesso para andreiabohner at gmail dot com.

Utilizando o Git e o github

Agora, para nos auxiliar, temos a nossa disposição o github, uma ferramenta fantástica, onde encontra-se a documentação.
Abaixo está uma descrição sucinta de como utilizar o git e o github.

Para começar, fazer o fork do repositório master da tradução para o português no github:

Agora, você irá “clonar” o projeto para a sua máquina local:
Copiar a URL do repositório do seu fork (semelhante a imagem abaixo), para utilizá-la com o comando git clone:

$ git clone git@github.com:seuusername/symfony-docs-pt-BR.git

Após completar o clone do repositório, ele terá o nome remoto “origin“. Não confundir, apesar do nome ser origin ele não está apontando para o repo master, mas sim para o seu fork no github.

Pronto, agora é só trabalhar na tradução do(s) documento(s).

Finalizadas as traduções e/ou revisões, faça o commit das alterações no seu repositório local:
$ git commit –a –m "pt_BR translation"

E atualize o seu repositório no servidor github com as alterações realizadas localmente:
$ git push origin master

O último passo é informar sobre as suas alterações ao responsável pelo repositório de origem para que ele faça um pull das alterações no repositório. Para isso, acesse a página do repositório original no github, em: https://github.com/andreia/symfony-docs-pt-BR e envie um pull request (clicando no botão “Pull Request”):

Mantendo seu repositório local atualizado

Sempre antes de fazer as suas alterações locais, lembrar de executar o comando pull para manter atualizado o seu repositório local trazendo as alterações do repositório de origem (o repositório que você fez o fork):
$ git remote add upstream git://github.com/andreia/symfony-docs-pt-BR.git
$ git pull upstream master

Formato da documentação

A documentação do Symfony2 utiliza a linguagem markup reStructuredText juntamente com o Sphinx, ao invés do markdown. Segue a referência: http://symfony.com/doc/2.0/contributing/documentation/format.html
Se preferir, existe um editor online, que pode auxiliar em: http://rst.ninjs.org/

Referências sobre o Git / github

Git Cheat Sheet
Working with remotes
Pro Git
My Common Git Workflow

[UPDATE 08/04/2011] Alterado o repositório de http://github.com/andreia/symfony-docs para https://github.com/andreia/symfony-docs-pt-BR