venerdì 2 ottobre 2009

symfony, generazione del Modello

Il file schema.yml visto la volta scorsa (symfony, creazione schema database) contiene tutte le informazioni necessarie a generare sia le classi del Modello che gli script SQL per la creazione delle tabelle del database. Prima di procedere occorre però creare un database vuoto per il nostro progetto.

Creazione database del progetto

Il database necessario alla nostra applicazione va creato con gli strumenti amministrativi di MySQL. Può essere usato phpMyAdmin se lo abbiamo installato sul server di sviluppo, altrimenti da una finestra terminale digitiamo

mysql --user=root --password="password root"

Poi al prompt mysql> inseriamo i seguenti comandi

create database lyra character set utf8;
create user lyra@localhost identified by "user password";
grant all on lyra.* to lyra@localhost;
exit

Al posto di user password va ovviamente la password desiderata per l'utente. Sul server di sviluppo si potrebbe utilizzare l'utente root per connettersi al database, ma per abitudine preferisco creare un utente specifico.

La configurazione database predefinita in simfony utilizza Propel, è bene rimuoverla poiché per Lyra utilizziamo Doctrine. Da una finestra terminale, posizionati nella cartella radice del progetto digitiamo

rm config/databases.yml

A questo punto creiamo la nuova configurazione con

./symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=lyra" lyra "user password"

"user password" è ovviamente la password scelta precedentemente per l'utente con i privilegi sul database lyra. Il comando genera un nuovo file config/databases.yml contenente i parametri di connessione.

Generazione classi del Modello

Sempre da terminale e sempre dalla cartella del progetto eseguiamo il comando

./symfony doctrine:build-model

In lib/model/doctrine vengono generate tre classi per ogni tabella definita nel file schema.yml. Ad esempio per la tabella Articoli

~
  sfprojects
    lyra
      lib
        model
          base
            BaseLyraArticle.class.php
            ...
          LyraArticle.class.php
          LyraArticleTable.class.php
          ...
        vendor
    ...

Le classi in lib/model/doctrine/base vengono sempre rigenerate ogni volta che si esegue doctrine:build-model quindi non devono mai essere modificate.

Come vedremo le classi in lib/model/doctrine possono invece essere personalizzate. In effetti sono create vuote da Doctrine. Ad esempio:

lib/model/doctrine/LyraArticle.class.php

<?php
/**
 * This class has been auto-generated by the Doctrine ORM Framework
 */
class LyraArticle extends BaseLyraArticle
{

}

Generazione script SQL

./symfony doctrine:build-sql

Dopo l'esecuzione del comando, in data/sql/schema.sql troviamo lo script per la creazione delle tabelle del database. Si può notare come siano state create le opportune chiavi esterne per ogni relazione che abbiamo definito in schema.yml.

Per eseguire lo script SQL e creare le tabelle nel database si utilizza il comando

./symfony doctrine:insert-sql

Generazione moduli

Sempre a partire dalle informazioni contenute nel file schema.yml, Doctrine è in grado di generare le classi per la gestione dei moduli di inserimento dati e la loro validazione.

./symfony doctrine:build-forms

Dopo l'esecuzione del comando troveremo classi base (in lib/form/doctrine/base) e classi derivate (in lib/form/doctrine) che definiscono i moduli di inserimento e modifica dei dati con le relative regole di validazione per ogni tabella dello schema. Anche in questo caso bisogna ricordare che le classi nella sottocartella base non devono essere modificate in quanto sovrascritte ogni volta che eseguiremo il comando. Le classi in lib/form/doctrine possono invece contenere nostro codice come vedremo in seguito.

Infine esiste un comando scorciatoia

./symfony doctrine:build-all

con il quale si eseguono in sequenza:

  • doctrine:build-model
  • doctrine:build-sql
  • doctrine:build-forms
  • doctrine:insert-sql

I risultati di tutto questo lavoro, più del framework che nostro, sono fissati alla revisione 6 del progetto su Google Code.

Adesso che abbiamo il database è il caso di metterci dentro un po' di dati almeno per cominciare a vedere qualcosa nel frontend della nostra applicazione. Questo è quello che faremo la prossima volta.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.