Back-End

21 nov, 2008

Symfony – Uma visão geral

Publicidade

O Symfony é um framework para aplicações web em PHP5, que implementa o padrão MVC, tornando possível a criação de aplicações PHP em três camadas.

Para vocês terem uma idéia do poder do symfony, o Yahoo Bookmarks (bookmarks.yahoo.com), com mais de 20 milhões de usuários, é uma aplicação que faz uso desse framework.

Nesse artigo, apresentarei o passo-a-passo de 02 tipos de instalação do framework e um exemplo básico de sua utilização.

Requisitos:

Versão do framework utilizada: 1.0.18 (http://www.symfony-project.org/

IDE utilizada: Eclipse PDT (http://www.eclipse.org/pdt/)

Banco de dados: MySQL (http://www.mysql.com)

Modelagem: MySQL Workbench (http://dev.mysql.com/workbench/)

Gerenciador do banco de dados: HeidiSQL (http://www.heidisql.com/)

site do symfonysite do symfony

Instalação utilizando Sandbox

É um projeto symfony vazio onde todas as bibliotecas necessárias já estão incluídas, e toda a configuração básica já está pronta. Não é necessário instalar nada. Útil apenas para testes. A desvantagem é a dificuldade de se atualizar a versão do symfony caso precise.

  1. Acesse a url: http://www.symfony-project.org/installation/1_0, selecione um dos tipos disponíveis: tgz ou zip;
  2. Descompacte na pasta do seu servidor web.

Instalação via PEAR

É recomendada para aqueles que desejam rodar diversos projetos baseados em symfony, com uma forma fácil de atualizá-lo. Necessita do PEAR versão 1.4.0 ou acima.

  1. Na linha de comando, adicione o canal do symfony ao PEAR: pear channel-discover pear.symfony-project.com
  2. Instale a versão 1.0: pear install symfony/symfony-1.0.18

Exemplo básico:

Como exemplo, criaremos um cadastro de contatos. Esse contato poderá ter 0 ou N telefones. A tabela tipo será responsável pelo cadastro dos tipos de telefone: Residencial, Celular, Comercial etc… Para modelar utilizaremos o MySQL Workbench. Não ensinarei como modelar, já que o propósito do artigo não é esse. Abaixo, temos o resultado final da modelagem.

Modelagem MySQL WorkbenchModelagem MySQL Workbench

Após a modelagem pelo MySQL Workbench podemos gerar o script de criação das tabelas. Para isso, acesse a opção: FILE / EXPORT / FORWARD ENGINEER TO SQL SCRIPT, selecione o caminho onde será gerado e clique em FINISH.

Script para criação do database e tabelasScript para criação do database e tabelas

Utilizando o HeidiSQL vamos rodar o script que o MySQL Workbench gerou. Esse script criará o database e as tabelas no mysql. Na aba QUERY, abra o arquivo e execute-o.

HeidiSQLHeidiSQL

Agora vamos começar a “brincar” com o symfony. Utilizando o sandbox vá até a pasta do servidor web/sf_sandbox e digite o comando: symfony ( será exibido uma lista com todos os comandos disponíveis).

Comandos do symfonyComandos do symfony

Próximo passo será criar o arquivo schema.yml. Ele irá ler o database que criamos acima e realizar o mapeamento objeto-relacional. Mas antes de rodar o comando, precisamos alterar 02 arquivos: databases.yml e propel.ini informando o banco de dados utilizado, o usuário e a senha de acesso. Os dados que estou utilizando são: usuário = root, senha = (vazia), database= exemplo01. Caso esteja utilizando algo diferente, faça as alterações necessárias.

Arquivo: sf_sandbox/config/databases.yml

all:

propel:

class: sfPropelDatabase

param:

dsn: mysql://root:@localhost/exemplo01

encoding: utf8

Arquivo: sf_sandbox/config/propel.ini

propel.targetPackage = lib.model

propel.packageObjectModel = true

propel.project = sf_sandbox

propel.database = mysql

propel.database.createUrl = mysql://root@localhost/

propel.database.url = mysql://root@localhost/exemplo01

Atenção:

Agora é só rodar o comando: symfony propel-build-schema

Para ver o resultado, é só abrir o arquivo schema.yml dentro da pasta config do sf_sandbox.

schema.ymlschema.yml

Para gerar os modelos, digite o comando: symfony propel-build-model;

Após gerar os modelos é só gerar os CRUDS de cada módulo:

– symfony propel-generate-crud frontend contato Contato

– symfony propel-generate-crud frontend telefone Telefone

– symfony propel-generate-crud frontend tipo Tipo

Atenção:

Sobre os parâmetros: frontend é o nome da nossa aplicação (não confundir com o nome do projeto). No sf_sandbox é frontend. Para conferir basta acessar a pasta: sf_sandbox\apps, mas nada impede de criar outras apps, mas isso não faz parte desse artigo. Deixaremos para o próximo. O outro parâmetro é o nome do módulo a ser criado e o outro se refere a classe que o módulo se baseará.

CrudCrud

Se tudo ocorreu bem, basta acessar o seguinte endereço em seu browser favorito:

Módulo de contato:

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/contato

Módulo de telefone:

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/telefone

Módulo de tipo

http://127.0.0.1/sf_sandbox/web/frontend_dev.php/tipo

O layout final não é muito amigável e pouco intuitivo, mas espero que com esse artigo eu possa ter passado uma pequena visão do symfony. Nos próximos artigos, vou utilizar esse mesmo projeto, mas não utilizaremos o comando de CRUD para geração das telas.

Download dos scripts do artigo

Opinem, deixem suas sugestões, afinal a coluna é de vocês.