Notas sobre o generator.yml (admin generator)

maio 16, 2007 por villefilho

Fato sabido que criar seções administrativas em sites é algo desestimulante mas felizmente o symfony nos exime deste fardo.

A criação de uma interface de administração é bem simples e parecida com a geração de um scaffold onde antes (1) cria-se uma aplicação para que seja (2) associado ao “admin” do projeto.
Um vídeo gravado pelos desenvolvedores do symfony demonstra este processo.

Percorrendo os diretórios gerados, resolvi ver como funcionam algumas das diretivas do arquivo generator.yml. Por si só, não há muito o que fazer mas depois de analisar alguns dos muitos exemplos disponíveis notei algumas características interessantes (leia nos comentários):

generator.yml:

generator:
  class:
    sfPropelAdminGenerator
    param:
      model_class:
        MailGroup
          theme:
            default
              fields:
              name:           { name: Nome } ## Mudando o nome de exibicao para esse campo

      ## Criado um metodo getUserName() em lib/model/BaseMailGroup.php      user_name:      { name: Usuário }

      created_at:     { name: Criação }

 list:   title:          Grupos de Envio   layout:         tabular   peer_method:    doSelectJoinUser ## Agrega os resultados das chaves estrangeiras   display:        [=name, created_at, user_name] ## Exibir esses campos   object_actions: ## Icones para edicao e remocao     _edit:        ~     _delete:      ~   max_per_page:   5 ## Paginacao (=alegria)

   ## Exibe uma "janelinha" para aplicacao de   ## filtos na tela principal da listagem   filters:        [name, created_at, user_id]

No exemplo mostrado, apenas a seção de listagem ( list ) foi configurada mas é possível incluir outras como edit.

“Existem várias maneiras de customização mais ou menos complexas, cada caso deve ser pensado de modo que não inviabilize uma futura manutenção de seu projeto depois de meses já em produção.”

Propel, Doctrine

maio 12, 2007 por villefilho

Em anúncio das novas funcionalidades da versão do symfony 1.1, deverá ser incluído um novo ORM chamado Doctrine.

Não vou especular sobre o futuro do Propel no symfony nem sobre a padronização para o Doctrine. Creio que esta questão permanecerá em aberto e deverá ficar assim, a decisão caberá ao desenvolvedor.

Interessados, podem procurar pelo framework oficial do Doctrine, Sensei, faz bem conhecer a concorrência! :)

Iniciando uma aplicação +CRUD

maio 10, 2007 por villefilho

Apenas depois de uma aplicação criada será possível perceber as reais utilidades para o symfony, os preguiçosos de plantão vão adorar…

Quem nunca precisou criar formulários para a manipulação de dados em múltiplas tabelas? Scaffold(ing) é O nome – uma estrutura básica para execução das ações de CRUD *.
Mas não espere interfaces cleans muito menos que isso represente seu site final, você vai precisar de um design mais atrativo… :D

Vamos ao que interessa, como colocar seus próprios andâimes (tradução literal):

  1. Crie uma aplicação -
    symfony init-app minha_aplicacao
  2. Diga ao symfony que coloque um scaffold em minha_aplicacao -
    symfony propel-generate-crud minha_aplicacao autor Autor

Como temos a tabela de tarefas que faz referência ao autor, podemos também incluí-la:

symfony propel-generate-crud minha_aplicacao tarefa Tarefa

Concluído, teremos no endereço http://localhost/tarefas/web/minha_aplicacao_dev.php/tarefa (ou autor) o resultado desses comandos.

Terrivelmente, sem nenhum layout. Uma solução simples que ameniza a péssima a falta de criatividade do scaffold é copiar o diretório sf_sandbox/web/sf para seu_projeto/web/sf.
Com isso será possível usufruir de algumas informações como informações de debug.

* Ações SQL de Create, Retrieve (mais conhecido como Select), Update e Delete.

Árduo.. mas produtivo

maio 8, 2007 por villefilho

Depois de navegar em alguns sites sobre como é o aprendizado do symfony, notei que assusta muita gente. Pois bem, mãos a obra e fui tentar criar o primeiro projeto.

Inicialmente, baseei-me no sf_sandbox sendo essa minha única referência comentada e realmente, funciona perfeitamente se seguidos os passos descritos na seção “Meu Primeiro Projeto“. Muito fácil… copiar e colar não ensina nada, que tal um aplicativo de “tarefas a fazer”?

Saindo do grande vazio, criei um novo projeto com o comando:

symfony init-project todo_list

Ótimo! O symfony criou como que por mágica toda a estrutura de diretórios e suas bibliotecas, conhecendo um pouco a estrutura do Propel, achei que o projeto precisaria de uma definição de quais tabelas iriam participar do aplicativo. Passeando pelo diretório config/ do sf_sandbox reparei no arquivo “schema.yml” (arquivo Yaml) e justamente nele encontra-se essa parte da configuração.

Antes disso, vamos a algo importante: o arquivo database.yml contém a configuração do seu banco e como o padrão é o MySQL, lembre-se de escrever nele seu nome de usuário, senha e nome do banco de dados.

A seguir, criei o seguinte:

propel:  autor:    _attributes: { phpName: Autor }    id:    nome:        varchar(255)    email:       varchar(255)    created_at:

  tarefa:    _attributes: { phpName: Tarefa }    id:    autor_id:    titulo:      varchar(255)    conteudo:    longvarchar    created_at:

Então os seguintes comandos são executados:

symfony propel-build-modelsymfony propel-build-sqlsymfony propel-insert-sql

Isso fez com que o symfony gerasse o SQL relativo a criação das tabelas, arquivos de classes e populasse o banco de dados local com as meta informações.

Temos já o esqueleto pronto, já podemos criar “apps” para nosso projeto.

Começando

maio 7, 2007 por villefilho

O symfony é um framework programado em PHP 5 que tenta implementar o padrão MVC, assim como o Rails é para o Ruby.

Pré-requisitos

Além do PHP 5, SQLite, algum banco de dados compatível com Creole (MySQL por exemplo), PHing, Pear:Log e, opcionalmente, o Propel já que este vem embutido no Symfony.

Sua utilização plena está sujeita a uma certa experiência em orientação a objetos e consultas SQL.

Apesar de ser uma aplicação já construída, o projeto de exemplo chamado sandbox possui toda a estrutura de diretório e configuração já montada poupando assim bastante tempo.

Propel

Apesar de não ser pré-requisito, conhecer esta parte vital do symfony só trará benefícios.
O Propel é o grande “motorista” das informações que percorrem os meandros deste framework e em algum momento de seu projeto você precisará utilizá-lo tanto para criar uma consulta SQL complexa como entender o que está ocorrendo em determinado trecho.

Phing e Pear:Log

Aparentemente, são exaustivamente utilizados pelo Propel na geração das classes de interface (PHing) e o Pear:Log que grava todas as queries em arquivo, ótima saída para Debugs.