Quer experimentar o symfony 1.1? Primeiramente vamos ter que configurar um novo projeto e instalar o sfDoctrine para o symfony 1.1. Execute os comandos abaixo e continue lendo:
$ mkdir symfony1.1Doctrine
$ cd symfony1.1Doctrine
$ /path/to/symfony generate:project symfony1.1Doctrine
$ svn co http://svn.symfony-project.com/plugins/sfDoctrinePlugin/trunk plugins/sfDoctrinePlugin
$ php symfony cc
Agora, digite o comando abaixo para listar tudo que o `sfDoctrinePlugin` oferece. Você vai perceber que o comando vai listar os mesmos comandos do `sfPropelPlugin` e muitos outros.
$ php symfony list doctrine
Available tasks for the “doctrine” namespace:
:build-all Generates Doctrine model, SQL and initializes the database (doctrine-build-all)
:build-all-load Generates Doctrine model, SQL, initializes database, and load data (doctrine-build-all-load)
:build-all-reload Generates Doctrine model, SQL, initializes database, and load data (doctrine-build-all-reload)
:build-all-reload-test-all Generates Doctrine model, SQL, initializes database, load data and run all test suites (doctrine-build-all-reload-test-all)
:build-db Creates database for current model (doctrine-build-db)
:build-forms Creates form classes for the current model (doctrine-build-forms)
:build-model Creates classes for the current model (doctrine-build-model)
:build-schema Creates a schema.xml from an existing database (doctrine-build-schema)
:build-sql Creates SQL for the current model (doctrine-build-sql)
:data-dump Dumps data to the fixtures directory (doctrine-dump-data)
:data-load Loads data from fixtures directory (doctrine-load-data)
:dql Execute a DQL query and view the results (doctrine-dql)
:drop-db Drops database for current model (doctrine-drop-db)
:generate-crud Generates a Doctrine CRUD module (doctrine-generate-crud)
:generate-migration Generate migration class (doctrine-generate-migration)
:generate-migrations-db Generate migration classes from existing database connections (doctrine-generate-migrations-db, doctrine-gen-migrations-from-db)
:generate-migrations-models Generate migration classes from an existing set of models (doctrine-generate-migrations-models, doctrine-gen-migrations-from-models)
:init-admin Initializes a Doctrine admin module (doctrine-init-admin)
:insert-sql Inserts SQL for current model (doctrine-insert-sql)
:migrate Migrates database to current/specified version (doctrine-migrate)
:rebuild-db Creates database for current model (doctrine-rebuild-db)
O `sfDoctrinePlugin` atualmente necessita de pelo menos uma aplicação configurada, então, vamos instanciar a aplicação `frontend`.
$ php symfony generate:app frontend
Agora vamos configurar nosso banco de dados em `config/databases.yml`. Abra o arquivo no seu editor predileto e utilize o YAML abaixo. Para esse teste, estamos simplesmente utilizando um banco de dados SQLite. O Doctrine é capaz de criar o banco de dados em `config/doctrine.db`.
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: sqlite:///<?php echo dirname(__FILE__); ?>/doctrine.db
Agora que nós temos nosso banco de dados configurado, vamos definir nosso schema em `config/doctrine/schema.yml`. Nesse exemplo nós estamos configurando o modelo `BlogPost` que `hasMany` (possui diversas) , `Tags`.
—-
BlogPost:
actAs:
Sluggable:
fields: [title]
Timestampable:
columns:
title: string(255)
body: clob
author: string(255)
relations:
Tags:
class: Tag
refClass: BlogPostTag
foreignAlias: BlogPosts
BlogPostTag:
columns:
blog_post_id:
type: integer
primary: true
tag_id:
type: integer
primary: true
Tag:
actAs: [Timestampable]
columns:
name: string(255)
Agora que nos temos nosso schema definido, vamos criar uma massa de teste em `data/fixtures/data.yml`. Abra o arquivo, e cole o YAML abaixo.
—-
BlogPost:
BlogPost_1:
title: symfony + Doctrine
body: symfony and Doctrine are great!
author: Jonathan H. Wage
Tags: [symfony, doctrine, php]
Tag:
symfony:
name: symfony
doctrine:
name: doctrine
php:
name: php
Ok, vamos para parte legal. Nós temos nosso schema, e temos também nossa massa, então vamos rodar uma única fez o comando do Doctrine abaixo para criar nosso banco de dados, gerar os modelos, criar as tabelas e carregar a massa de teste.
$ php symfony doctrine-build-all-reload frontend
>> doctrine Are you sure you wish to drop your databases? (y/n)
y
>> doctrine Successfully dropped database f…1.1Doctrine/config/doctrine.db”
>> doctrine Successfully created database f…1.1Doctrine/config/doctrine.db”
>> doctrine Generated models successfully
>> doctrine Created tables successfully
>> doctrine Data was successfully loaded
Agora nosso banco de dados SQLite `doctrine.db` foi criado, todas as tabelas do nosso schema foram criadas e populadas. Agora vamos começar a brincar com os dados e ver como nós podemos utilizar o Doctrine Query Language para trazer as informações do banco.
$ php symfony doctrine:dql frontend “FROM BlogPost p, p.Tags t”
>> doctrine executing: “FROM BlogPost p, p.Tags t” ()
>> doctrine –
>> doctrine id: 1
>> doctrine title: symfony + Doctrine
>> doctrine body: symfony and Doctrine are great!
>> doctrine author: Jonathan H. Wage
>> doctrine slug: symfony-doctrine
>> doctrine created_at: 2008-06-16 12:28:57
>> doctrine updated_at: 2008-06-16 12:28:57
>> doctrine Tags:
>> doctrine –
>> doctrine id: 1
>> doctrine name: symfony
>> doctrine created_at: 2008-06-16 12:28:57
>> doctrine updated_at: 2008-06-16 12:28:57
>> doctrine –
>> doctrine id: 2
>> doctrine name: doctrine
>> doctrine created_at: 2008-06-16 12:28:57
>> doctrine updated_at: 2008-06-16 12:28:57
>> doctrine –
>> doctrine id: 3
>> doctrine name: php
>> doctrine created_at: 2008-06-16 12:28:57
>> doctrine updated_at: 2008-06-16 12:28:57
Agora, vamos explicar um pouco os resultados obtidos. Como você pode ver, nos modelos nós temos as colunas created_at, updated_at and slug que não foram definidas no schema. Essas colunas são adicionadas pelo behavior anexado ao schema dentro da configuração actAs. As colunas `created_at` e `updated_at` são automaticamente atualizadas `onInsert` e `onUpdate`, e a coluna do slug é uma string criada baseada na coluna name para ser utilizada na url(url amigável). O Doctrine tem alguns behaviors que são incluídos no core como `Sluggable` e `Timestampable`, mas o sistema de behavior é feito para permitir que qualquer pessoa escreva novos behaviors para os modelos e serem reutilizados.
Agora que nós temos nossa base configurada e populada, vamos fazer alguns testes utilizando o admin generator para manipular os posts e tags do blog.
Agora vamos abrir nosso browser e verificar a aplicação `frontend` e os módulos `blog_posts` e `tags`. Eles devem ser localizados numas urls parecida com essas
Agora, com um pouco de configuração no admin generator do blog_post, nós podemos controlar o relacionamento entre blog_post e tags marcando checkboxes quando editando um post. Abra o arquivo `apps/frontend/modules/blog_posts/config/generator.yml` e troque o conteúdo pelo YAML abaixo:
Agora atualize (f5) seu browser para listar os posts do blog. Você vai ver tudo de uma maneira mais limpa. Edite um post clicando no ícone ou no título. Veja abaixo como você pode marcar as tags associadas ao post.
99% das ferramentas que você vê funcionando no Propel, você pode ver também no Doctrine. Então, é fácil entender e aplicar. O sfDoctrinePlugin implementa todas as funcionalidades que o sfPropelPlugin e algumas mais. Nos links abaixo você pode obter mais informação sobre o que o Doctrine suporta.
Se esse pequeno tutorial despertou seu interesse no Doctrine, você pode encontrar mais informações do Doctrine abaixo e aprender um pouco mais sobre ele:
Charles Maske | 30-Sep-08 at 12:08 pm | Permalink
Caro colega, estou tentando trabalhar com o plugin sfDoctrine porém estou enfrentando alguns problemas. Fiz a instalação do symfony 1.1 através do PEAR e instalei o sfDoctrine como vc mencionou aqui neste site. Fiz até a geração do CRUD porém qdo tento limitar os campos através do generator.yml nada acontece na minha aplicação. Por exemplo, qdo tento retirar alguns campos que não quero que sejam mostrados, nada acontece, aparentemente o generator.yml é parseado com sucesso mas nada muda no meu módulo. Outra coisa é que os crud’s gerados vem com um tema bem cru, sem aquelas imagens e aparencia que consta nos screenshots aqui do site.
Bem se puder me dar uma luz eu agradeço.
[]‘s