Tableless

Busca Menu

Iniciando com Symfony 2 – Parte 02

Seja o primeiro a comentar por

Symfony logo

Depois de já instalado o Symfony 2, como postado no artigo anterior que escrevi, vamos avançar nosso processo criando um simples blog.
É claro que o Symfony é para projetos maiores, mas para efeito de didática, achei um bom começo, espero que gostem.

Bundle o coração do symfony

O Symfony trabalha com bundle (pacote), que é um conjunto de códigos que pode ser reutilizado em outros projetos. Simplificando: são componentes prontos, que facilitam nossa vida na hora de desenvolver. Podemos criar um bundle do zero, como vamos fazer aqui, ou configurar um já pronto.

Antes de criarmos de nosso primeiro bundle, vamos fazer uma pequena modificação no projeto. Não vamos precisar do bundle AppBundle, só usamos para a introdução.

Exclua a pasta AppBundle como mostrado na imagem, caminho src/AppBundle.

Imagem pastas app/AppBundle

Vamos apagar o registro desse bundle que acabamos de excluir, pois todos os bundles são registrados no AppKernel para que possamos usá-los.

Entre no arquivo app/AppKernel.php e apague a linha “new AppBundle\AppBundle()”, no meu caso a linha 19.

 <?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
//apague    new AppBundle\AppBundle(),    caso contrário acarretará em erro...
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }
}

Também devemos excluir a rota desse bundle.
Entre no arquivo app/config/routing.yml e apague as linhas abaixo:

 app:
    resource: @AppBundle/Controller/
    type:     annotation

Cuidado caso tenha feito alguma modificação desde a instalação, no meu caso, estou dando continuidade a partir da instalação, e apagando as linhas acima, meu arquivo routing.yml, ficou vazio.

Criando um bundle utilizando o componente console do Symfony

Vamos criar nosso bundle! Podemos fazer isso codificando, porém o Symfony 2 nos traz um ferramenta poderosa e fantástica, o componente cosole, que já vem instalado em nossa aplicação, ou podemos instalá-lo separadamente pelo packagist, via composer.

Vamos lá.
Entre na pasta do projeto pelo terminal:

$ cd symfony

Primeiramente, para vermos o que o console do symfony é capaz, vamos digitar no terminal:

$ php app/console

Com este comando seremos apresentados à uma lista de comandos que podemos efetuar em nossa aplicação pelo componente console do Symfony. Se instalarmos alguns componentes adicionais do symfony, essa lista pode aumentar, mas não é nosso caso agora, vamos dar continuidade!

Para criarmos nosso bunble, digitamos no terminal:

$ php app/console generate:bundle

Após darmos o enter aparecerá a seguinte tela, que é um assistente do Symfony para nos ajudar na geração do bundle:
Criando bundle pelo symfony console

O symfony nos pede para digitarmos nossa namespace, que é o caminho completo do nosso bundle, primeiramente, temos que dar um nome para nosso vendor, caso não entenda, sugiro a leitura da PSR-4, em meus projetos particulares, coloco a sigla do meu nome como vendor “CJSN”, porém você pode colocar o nome do seu projeto, do seu cliente, etc… Aqui vamos colocar Tableless, em seguida o nome de nosso bundle.

Então digitamos

$ Bundle namespace: Tableless/CoreBundle

Ao darmos enter, o Symfony nos pergunta como esse bundle vai ser reconhecido em nosso projeto e nos sugere um nome: TablelessCoreBundle

$ Bundle name [TablelessCoreBundle]:

Você pode simplificar digitando apenas CoreBundle, em meu caso vou deixar como está, gosto assim em meus projetos, deixando-os padrão.
E damos enter.

Agora a pergunta é: Qual o caminho que queremos instalar nosso bundle?
Por padrão vamos deixá-lo na pasta src/, somente damos enter.

$ Target directory [/home/candidosouza/tableless/symfony/src]:

Como vamos fazer a configuração de nosso bundle?
Digitamos annotation e enter:

$ Configuration format (yml, xml, php, or annotation): annotation

A próxima pergunta é: Se queremos que ele gere toda a estrutura de diretórios de um bundle? Não, apenas damos um enter.

$ Do you want to generate the whole directory structure [no]?

Nos pergunta sobre a confirmação de geração do bundle, damos enter.

$ Do you confirm generation [yes]? 

Desejamos adicionar as configurações no AppKernel? Sim queremos, somente digitamos enter.

$ Confirm automatic update of your Kernel [yes]?

E pergunta se queremos inserir rotas para esse bundle, digitamos enter.

$ Confirm automatic update of the Routing [yes]? 

E pronto, nosso bundle está criado, veja as imagems abaixo para comparação.
Finalizando criação de bundle

Imagem finalizada CoreBundle

Para vermos se está tudo certo, podemos entrar em nosso navegador e digitar a rota exemplo criada pelo Symfony: @Route(“/hello/{name}”), então digitamos a url no navegador: http://127.0.0.1:8000/hello/Tableless
Lembrando que o servidor deve estar iniciado, você pode ver isso no tutorial anterior. Aparecerá a mensagem “Hello Tableless!”, se você notar, verá que a debug toolbar, a barra de ferramentas do Symfony, não está aparecendo, mas não vamos nos preocupar com isso, pois não usaremos essa rota, ela é gerada apenas para exemplo.

Após a crianção do nosso bundle, o CoreBundle, vamos repetir a operação, e criar um novo bundle, agora com o nome ModelBundle.

Novamente digitamos

$ php app/console generate:bundle

em seguida:

$ Tableless/ModelBundle

E todo o processo anteriormente feito…

A primeira coisa a fazer depois de criarmos o ModelBundle, é excluir a rota gerada pelo Symfony, é claro que poderíamos ter feito isso na hora da criação, pelo terminal, quando ele nos faz a última pergunta: Confirmar atualização automática das Rotas[sim]?

$ Confirm automatic update of the Routing [yes]? 

Era só termos digitado “no”, mas para efeito de didática, e para não ficarmos duplicando código nesse tutorial, preferi deixar assim.

Vamos entrar no arquivo app/config/route.yml e vamos apagar a rota gerada para esse bundle.
Apague as linhas abaixo:

tableless_model:
    resource: "@TablelessModelBundle/Controller/"
    type:     annotation
    prefix:   /

Deixando somente a rota do CoreBundle criada anteriormente.

Vamos excluir também, as pastas Controller, e views, pois não vamos usar esses arquivos nesse bundle.
Caminhos das pastas a serem excluidas:
src/Tableless/ModelBundle/Controller
src/Tableless/ModelBundle/Resources/views

Excluindo pastas

Concluindo

Pronto, nosso simples projeto, está configurado e pronto para darmos inicio aos demais processos, neste momento em que se encontra o mesmo, vou comitar, e subir o projeto para o GitHub. No próximo tutorial veremos como criar entidades com o Doctrine ORM em conjunto com o Symfony, para inserirmos nossos posts no banco de dados.
Para finalizarmos, recomendo novamente a documentação do Symfony, caso queiram fazer testes, estudar, se aprofundar mais no assunto!

Publicado no dia