Compartilhe seus conhecimentos
 
"É impossível para um homem aprender aquilo que ele acha que já sabe"
-Epíteto
03/01/2010 por Otávio Augusto
O Symfony é um framework para desenvolvimento em PHP que segue adequadamente o conceito de orientação a objetos e vários padrões de projeto para desenvolvimento web, dentre eles o Modelo, Visão e Controle (MVC). Por causa dos seus recursos, esse framework tem se popularizado muito entre a comunidade de desenvolvedores. Em posts futuros, iremos falar mais sobre o Symfony. O nosso objetivo hoje é integrar o ExtJS com o Symfony, já existem alguns plugins, para essa tarefa, no entanto, a forma como eles funcionam pode não ser a mais adequada, ou desejada, para desenvolvedores ExtJS. Então vamos fazer essa integração de uma forma mais simples, para quem já está acostumado a desenvolver em ExtJS e mesmo para aqueles que ainda estão iniciando.
 
Etapa 1: Criando o projeto no Symfony
 
O primeiro passo é instalar o Symfony, não vamos explicar, neste post, como fazê-lo, mas se tiver alguma dúvida consulte a documentação oficial. Feito isso, vamos criar um novo projeto, no nosso caso, estamos nomeando-o de blogone:
php symfony generate:project blogone
 
 O sfExtJSViewPlugin, destina-se a aplicação de backend, uma vez que pretendemos utilizar o ExtJS no frontend, então vamos criar a aplicação de backend:
php symfony generate:app backend
 
Feito isso, a primeira etapa está concluída.
 
Etapa 2: Instalando o sfExtJSViewPlugin
 
O sfExtJSViewPlugin foi desenvolvido pela Net On para tornar mais simples a integração Symfony + ExtJS. Ele baixado diretamente da área de plugins no site do Symfony pelo link: http://www.symfony-project.org/plugins/sfExtJSViewPlugin. A instalação pode ser feita de duas formas: 
1. Utilizando a tarefa plugin-install do symfony:
php symfony plugin:install sfExtJSViewPlugin
 Lembrando que para o comando acima funcionar, é preciso ter o PEAR instalado.
 
2. Descompactando o conteúdo do arquivo baixado e colocando o seu conteúdo na pasta plugins do projeto. Caso esta opção seja a escolhida, será necessário habilitar o plugin no arquivo ProjectConfiguration.class.php:
blogone/config/ProjectConfiguration.class.php
  public function setup()
  {
    $this->enablePlugins(array(
        'sfDoctrinePlugin',
        'sfExtJSViewPlugin'
    ));
 Como o plugin foi instalado manualmente, é necessário habilitá-lo no framework manualmente também.
 
Para concluir a instalação, crie um arquivo module.yml dentro da pasta apps/backend/config/ e coloque o seguinte conteúdo:
apps/backend/config/module.yml
default:
  view_class:       sfExtJS
Essa entrada, substitui o componente View padrão do symfony pelo plugin.
 
Etapa 3: Criando o módulo
 
Vamos criar um módulo chamado artigo na aplicação backend:
php symfony generate:module backend artigo
O comando acima criou uma nova estrutura de arquivos dentro do diretório apps/backend chamado artigo. Vamos alterar o código fonte do arquivo artigo/actions/actions.class.php e deixar a função executeIndex como a seguinte:
apps/backend/modules/artigo/actions/actions.class.php
    public function executeIndex(sfWebRequest $request)
    {
        // array de resultados, em situações reais, capturados pelo plugin ORM
        $artigos = array(0 => array(
               'id' => 1,
               'titulo' => 'Primeira postagem',
               'conteudo' => 'Conteúdo da primeira postagem'
        ));
        
        //A propriedade result é obrigatória, para que o plugin gere o conteúdo json adequado
        $this->result = array(
            'results' => $artigos //results é o índice de onde será buscado o array de resultados,
            //opcionalmente pode-se passar um índice 'success' (booleano) e um 'total' para o total de resultados
           //se não forem informados receberão respectivamente os valores true e count(results)
        );       
    }
Se fizermos um acesso pelo navegador já teremos o resultado JSON desejado, para testar, vá no navegador e digite o endereço do seu projeto, no nosso caso: http://localhost/blogone/web/index.php/artigo, o resultado será:
({"success":true,"total":1,"results":[{"id":"1","titulo":"Primeira postagem", "conteudo":"Conte\u00fado da primeira postagem"}]})
 Bem, feito isso, a terceira etapa já está concluída.
 
Resumindo
 
Hoje criamos o projeto symfony, instalamos o sfExtJSViewPlugin, criamos e editamos um módulo artigo e já temos um resultado JSON aceitável ao ExtJS. No próximo post, vamos criar a aplicação frontend com o ExtJS e escrever uma aplicação com um DataGrid que será carregado dinamicamente fazendo requisições ao método que criamos hoje. Até lá.
 

Opa! e a parte 2 ? smile

Por Daniel em 28/02/2010 às 22:39

Olá Daniel, bom ter perguntado. Vou disponibilizar a parte 2 ainda esta semana.

Por Otávio Augusto em 02/03/2010 às 12:10

 Categorias  Arquivo