Objetivos do dia

[box] – Configurar o ambiente de desenvolvimento
– Instalar um projeto Symfony2
– Exibir uma página do aplicativo em nosso navegador
[/box]

Ambiente de Desenvolvimento – Arrumando a casa

A primeira etapa é verificar se o seu computador possui um ambiente de desenvolvimento compatível, você precisa basicamente de:

[box] – Um servidor web (por exemplo Apache)
– Interpretador PHP (5.3.2 ou superior)
– Banco de dados (por exemplo Mysql)
[/box]

Para facilitar esse processo estou usando um Sistema GNU/Linux – Ubuntu, se você não é um usuário Linux essa pode ser uma oportunidade para começar a usar, garanto que depois de algum tempo você verá que se torna inviável usar outra plataforma de desenvolvimento.

O processo de instalação desses softwares é bem simples e consiste em usar o programa apt-get ou outro gerenciador de pacotes para instalar os mesmos.

Em uma busca rápida no Google você pode encontrar diversos tutoriais:
[box] – Instalando um servidor LAMP no Ubuntu 11.04
Instalando um servidor LAMP no Ubuntu
[/box]

O meu ambiente conta com as seguintes configurações:

[box] Ubuntu 11.10
Apache 2.2.20
MySQL 5.1.61
PHP 5.3.6
[/box]

Além de algumas extensões do PHP como:
[box] – php5, o pacote principal.
– php5-cli, para PHP em linha de comando.
– php5-curl, para bibiloteca CURL.
– php5-gd, biblioteca manipulação de imagens via PHP.
– php5-mysql, para conexão com bancos de dados MySQL.
– php5-pgsql, para conexão com bancos de dados PostgreSQL.
– php5-sqlite, para conexão com bancos de dados SQLite.
– php5-sybase, para conexão com Sybase e Microsoft SQL Server.
– php5-xsl, para aplicação de estilos XSL.
– php-doc, documentação do PHP.
[/box]

Ferramentas adicionais de trabalho

É claro que também precisamos de outras ferramentas para facilitar o nosso trabalho.

IDE:
Usar uma IDE de desenvolvimento ajuda muito no processo.
Você pode ficar a vontade para escolher a sua IDE preferida, neste tutorial resolvi usar o NetBeans.
Aqui você encontra um tutorial complementar de como configurar o seu ambiente de desenvolvimento com o NetBeans.
Configurando o ambiente de desenvolvimento de PHP em Ubuntu Linux

MySQL Workbench:
Permite que o DBA, desenvolvedor ou arquiteto, projete visualmente, modelos e crie, gerencie bancos de dados MySql.
Ele inclui tudo o que um modelador precisa para a criação de modelos complexos ER, para desenvolvimento e engenharia reversa, ele também oferece recursos fundamentais para a realização de gestão de mudanças  e tarefas de documentação, que normalmente exigem muito tempo e esforço.
http://www.mysql.com/products/workbench/

PhpMyAdmin:
PhpMyAdmin é uma ferramenta livre escrita em PHP, destinada a lidar com a administração de bancos de dados MySQL.
Ele suporta uma ampla gama de operações com MySQL. As operações mais frequentemente utilizados são suportados pela interface do usuário (bases de dados de gestão, tabelas, campos, relações, índices, usuários, permissões, etc), você ainda tem a capacidade de executar diretamente qualquer declaração SQL.
http://www.phpmyadmin.net

Você pode instalar todos estes aplicativos também pela linha de comando.

Baixando e instalando Symfony2

Prepare um diretório no seu servidor web onde você deseja instalar o seu novo projeto.
Para esse tutorial estou usando o seguinte caminho:
[box] /home/john/public_html/jobeet
[/box]

Você também pode utilizar o caminho padrão:
[box] /var/www
[/box]

Acesse:
[box] http://www.symfony.com/download
[/box]

E faça o download da versão Symfony Standard Edition 2.0.x.
Esta versão já possui os vendors (Bundles) padrões para o inicio do seu trabalho e funciona como um Sandbox (parecido com Symfony 1.x).

Neste momento estou usando a versão 2.0.15.

Após o download, descompacte o conteúdo do pacote no diretório que você escolheu para o projeto.

No meu caso:
[box] # Baixe o framework
curl -0 http://symfony.com/get/Symfony_Standard_Vendors_2.0.15.tgz > ~/Downloads/Symfony_Standard_Vendors_2.0.15.tgz

# Descompacte o pacote
tar -xzvf ~/Downloads/Symfony_Standard_Vendors_2.0.15.tgz

# Mova os arquivos para a pasta
mv ~/Downloads/Symfony ~/public_html/jobeet

# Acesse a pasta
cd ~/public_html/jobeet

# Liste o conteúdo da mesma
ll ou ls -la
[/box]

Você verá algo como:

Configurando o Servidor Web (Apache 2)

Abra o arquivo:
[box] /etc/apache2/sites-enabled/000-default
ex: sudo gedit /etc/apache2/sites-enabled/000-default
[/box] Insira o código:
[box] # Configure de acordo com o seu usuário e local do projeto
<VirtualHost jobeet.local>
DocumentRoot /home/john/public_html/jobeet/web
DirectoryIndex app.php
ErrorLog  /home/john/public_html/jobeet/app/logs/jobeet-error.log
CustomLog /home/john/public_html/jobeet/app/logs/jobeet-access.log combined
<Directory “/home/john/public_html/jobeet/web”>
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
[/box] Abra o arquivo:
[box] /etc/hosts
ex: sudo gedit /etc/hosts
[/box] Insira a entrada:
[box] 127.0.0.1 jobeet.local
[/box] Reinicie o seu servidor:
[box] sudo invoke-rc.d apache2 restart
[/box]

Teste sua instalação

Abra seu browser preferido e acesse a url:
[box]http://jobeet.local/app_dev.php[/box]

Você deve visualizar uma página como esta:

Ponto de atenção

Dependendo das configurações do seu ambiente, os arquivos e programas podem se encontrar e comportar de forma diferente.
Uma pesquisa rápida no Google pode resolver todas estas etapas.

O importante neste momento é que você entenda o que deve ser feito:
[box] – Configurar o seu servidor web para receber as requisições e invocar a aplicação symfony de forma correta.
– Configurar o seu servidor para que o mesmo armazene os logs de acesso, alertas e erros.
– Configurar a sua rota de acesso (arquivo host) para que o seu browser entenda que esta é uma requisição para o seu servidor local.
– Reiniciar os serviços de httpd do seu servidor para que ele possa responder de forma correta as novas requisições inseridas.
– Acessar o aplicação symfony através do seu navegador favorito.
[/box]

Para evitar algumas dores de cabeça mais tarde, verifique se sua configuração pode executar um projeto Symfony2 tranquilamente, acesse a URL:
[box]http://jobeet.local/config.php[/box]

E certifique-se de que você não tem grandes problemas listados, aproveite e siga as recomendações opcionais listadas (casos elas existam).

Não tenha preguiça, essa é a melhor dica, e se possível aprofunde-se em várias outras etapas, isso agrega mais conhecimento para você.

Domando o console

Assim como 1.x Symfony, Symfony2 vem com a ferramenta de console que você vai usar para simplificar diversas tarefas.
Para ver uma lista de opções você deve digitar no terminal o comando:
[box]php app/console list[/box](Aqui você invoca o php para interpretar o arquivo console que recebe o argumento de listar)
A saida será algo como:
[box] Symfony version 2.0.15 – app/dev/debug

Usage:
[options] command [arguments]

Options:
–help -h Display this help message.
–quiet -q Do not output any message.
–verbose -v Increase verbosity of messages.
–version -V Display this application version.
–ansi Force ANSI output.
–no-ansi Disable ANSI output.
–no-interaction -n Do not ask any interactive question.
–shell -s Launch the shell.
–env -e The Environment name.
–no-debug Switches off debug mode.

Available commands:
help Displays help for a command
list Lists commands
assetic
assetic:dump Dumps all assets to the filesystem
assets
assets:install Installs bundles web assets under a public web directory
cache
cache:clear Clears the cache
cache:warmup Warms up an empty cache
container
container:debug Displays current services for an application
doctrine
doctrine:cache:clear-metadata Clears all metadata cache for a entity manager
doctrine:cache:clear-query Clears all query cache for a entity manager
doctrine:cache:clear-result Clears result cache for a entity manager
doctrine:database:create Creates the configured databases
doctrine:database:drop Drops the configured databases
doctrine:ensure-production-settings Verify that Doctrine is properly configured for a production environment.
doctrine:generate:crud Generates a CRUD based on a Doctrine entity
doctrine:generate:entities Generates entity classes and method stubs from your mapping information
doctrine:generate:entity Generates a new Doctrine entity inside a bundle
doctrine:generate:form Generates a form type class based on a Doctrine entity
doctrine:mapping:convert Convert mapping information between supported formats.
doctrine:mapping:import Imports mapping information from an existing database
doctrine:mapping:info Shows basic information about all mapped entities
doctrine:query:dql Executes arbitrary DQL directly from the command line.
doctrine:query:sql Executes arbitrary SQL directly from the command line.
doctrine:schema:create Executes (or dumps) the SQL needed to generate the database schema
doctrine:schema:drop Executes (or dumps) the SQL needed to drop the current database schema
doctrine:schema:update Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata
generate
generate:bundle Generates a bundle
generate:doctrine:crud Generates a CRUD based on a Doctrine entity
generate:doctrine:entities Generates entity classes and method stubs from your mapping information
generate:doctrine:entity Generates a new Doctrine entity inside a bundle
generate:doctrine:form Generates a form type class based on a Doctrine entity
init
init:acl Mounts ACL tables in the database
router
router:debug Displays current routes for an application
router:dump-apache Dumps all routes as Apache rewrite rules
swiftmailer
swiftmailer:spool:send Sends emails from the spool

[/box]

Criando o seu primeiro Bundle

É hora de criamos o nosso primeiro Bundle.

Mas o que é um Bundle?
[box]A Bundle is a directory containing a set of files (PHP files, stylesheets, JavaScripts, images, …) that implement a single feature (a blog, a forum, etc). In Symfony2, (almost) everything lives inside a bundle.[/box]Em português:[box]Um Bundle (pacote) é um diretório contendo um conjunto de arquivos (arquivos PHP, folhas de estilo, JavaScripts, imagens, …) que implementa um único recurso (um blog, um fórum, etc). Em Symfony2, (quase) tudo vive dentro de um Bundle.[/box]

Resumindo Bundles no Symfony2 são uma evolução dos plugins do Symfony 1.x
Tudo em Symfony2 é Bundle. Eles são componentes que formam as aplicações e até mesmo o próprio framework.
Em um conjunto de arquivos, que você pode adicionar a seu trabalho para facilitar a implementação de alguma funcionalidade do seu sistema.

Insira o comando no terminal:
[box]php app/console generate:bundle –namespace=Tot/JobeetBundle –format=yml[/box] O gerador irá lhe fazer algumas perguntas antes de gerar o pacote.
Aqui estão as perguntas e as respostas (todos, exceto uma, são as respostas padrão se você usou o comando acima):

[box] Bem-vindo ao gerador de Bundles Symfony2

O código da sua aplicação deve ser escrito em formato de um bundle. Este help de comando irá gerá-los facilmente.

Cada bundle possui um espaço de nomes (namespace) (como Acme/Bundle/BlogBundle).
O namespace deve começar com o nome de um “vendedor” (vendor) como o nome da empresa, o nome do projeto, ou o nome do cliente, seguido por um ou mais categorias opcionais de sub espaços de nome (sub-namespaces), e deve terminar com o nome do pacote em si (a qual deve ter Bundle como um sufixo).

Veja http://symfony.com/doc/current/cookbook/bundles/best_practices.html para obter mais detalhes sobre convenções de nomenclatura dos bundles.

Use / em vez de \ para o delimitador de namespace para evitar qualquer problema.

Bundle namespace [Tot/JobeetBundle]: (Aperte enter)

Em seu código, um bundle é muitas vezes referenciado pelo seu nome.
Ele pode ser a concatenação de todas as partes do namespace, mas é realmente interessante, você possuir um nome exclusivo (uma prática boa é começar com o nome do fornecedor – como em nosso caso Tot de TotLab).
Com base no namespace, sugerimos TotJobeetBundle.

Bundle name [TotJobeetBundle]: (Aperte enter)

O bundle pode ser gerado em qualquer lugar. Este é o diretório padrão sugerido, usado nas convenções padrão.

Target directory [/home/john/public_html/jobeet/src]: (Aperte enter)

Determine o formato de uso das suas configurações. (de qualquer forma ele será convertido para PHP para ficar bem rápido).

Configuration format (yml, xml, php, or annotation) [yml]: (Aperte enter)

Para ajudar você a começar bem rápido, o comando pode gerar alguns trechos de código.
(inclusive vamos usar o mesmo em nossos exemplos)

Do you want to generate the whole directory structure [no]? (escreva yes e aperte enter)

Resumo antes da geração

Você está indo gerar um bundle “Tot\JobeetBundle\TotJobeetBundle” em
“/home/john/public_html/jobeet/src/” usando o formato “yml”.

Do you confirm generation [yes]? (Aperte enter)

Geração do Bundle

Gerando o código de Bundle: OK
Verificando se o Bundle será carregado automaticamente: OK
Confirmando a atualização automática do seu Kernel (núcleo) [sim]?
Ativando o Bundle dentro do Kernel: OK
Confirmando a atualização automática das rotas – Routing [sim]?
Importando o Bundle de recursos para o roteamento: OK

Agora você pode começar a usar o código gerado!
[/box]

Limpe o cache depois de gerar o novo bundle com:
[box] php app/console cache:clear –env=prod
php app/console cache:clear –env=dev
[/box]

Acessando o Bundle

O JobeetBundle pode ser encontrado no diretório src de fora do projeto: src/Tot/JobeetBundle.
O gerador de bundles também cria um defaultController com uma ação index.
Você pode acessa-lá através do seu navegador:
[box] http://jobeet.local/hello/jobeet
http://jobeet.local/app_dev.php/hello/jobeet[/box]

Ambientes de trabalho

Como em Symfony 1.x, Symfony2 possui ambientes de trabalho diferentes. Se você olhar no diretório do projeto web, você verá dois arquivos PHP: app.php e app_dev.php.

Esses arquivos são chamados front controllers; todas as solicitações para a aplicação são feitos através deles.

O arquivo app.php invoca o ambiente de produção (que geralmente possui um cache para otimizar o acesso) enquanto app_dev.php invoca o ambiente de desenvolvimento (que executa todas as chamadas novamente – sem cache).

O ambiente de desenvolvimento é fundamental para trabalhar com Symfony, por possuir diversos recursos como a Web Debug Bar e mensagens de alertas e erros ativadas.

Conclusão

Hoje conseguimos fechar nossa instalação e configurar nosso ambiente de desenvolvimento.
Vejo você no dia seguinte deste tutorial, quando falaremos sobre o projeto Jobeet.

Abraços.

Add a Comment

Your email address will not be published. Required fields are marked *