symfony: back in action!

di Davide Borsatto il 26 maggio 2008

Dopo qualche giorno di pausa forzata dovuta ad impegni, torna più prepotente che mai il nostro caro vecchio symfony!

Finalmente! Dopo le prime puntate dove ci siamo occupati più che altro di teoria, ora è giunto il momento di vedere davvero del codice PHP.

Anzi, prima di fare ciò dobbiamo dedicarci un attimo al database. Come ho accennato, questo nostro progetto ci porterà alla realizzazione di un forum, che ho affettuosamente chiamato “shiny!“. Ora, abbiamo bisogno di definire concretamente questo forum, per poterci lavorare sopra. Per poter utilizzare un database in symfony, è necessario descrivere la struttura delle tabelle attraverso il file config/schema.yml. Ecco quello che utilizzo io:

propel:
  groups:
    _attributes: { phpName: Group }
    id:          ~
    name:        varchar(50)
  authors:
    _attributes: { phpName: Author }
    id:          ~
    group_id:    { foreignTable: groups, foreignReference: id }
    name:        varchar(50)
    password:    varchar(50)
    image:       varchar(255)
    signature:   varchar(255)
    advises:     integer
    created_on:  timestamp
  forums:
    _attributes: { phpName: Forum }
    id:          ~
    title:       varchar(50)
    description: varchar(255)
    parent_id:   { foreignTable: forums, foreignReference: id }
  threads:
    _attributes: { phpName: Thread }
    id:          ~
    forum_id:    { foreignTable: forums, foreignReference: id }
    author_id:   { foreignTable: authors, foreignReference: id }
    created_on:  timestamp
    title:       varchar(50)
  posts:
    _attributes: { phpName: Post }
    id:          ~
    author_id:   { foreignTable: authors, foreignReference: id }
    thread_id:   { foreignTable: threads, foreignReference: id }
    created_on:  timestamp
    updated_on: timestamp
    text:        longvarchar

Chiarimento rapido. YAML è un linguaggio di markup dalla sintassi più coincisa rispetto ad XML, che si basa sull’indentazione con gli spazi (niente tab quindi). Per ulteriori informazioni potete visitare la pagina ufficiale del progetto.

Ora analizziamo per bene ciò che ho appena scritto: L’elemento “propel:” è il padre di tutti gli altri, e deve esserci forzatamente su utilizzate questo ORM (che è il default plugin di symfony). Ogni figlio di propel è il nome con cui la tabella è salvata nel DBMS, seguita dall’elemento _attributes; Tra le parentesi graffe l’elemento phpName indica il nome che avrà la classe generata in PHP (per convenzione singolare con la prima lettera maiuscola). Di seguito poi ogni elemento delle tabelle, dove id: ~ significa chiave primaria. Gli altri elementi credo che siano comprensibili, per cui non mi dilungo tanto nella spiegazione. In caso di dubbi scriveteli pure nei commenti.

Ora da linea di comando date questi comandi:

php symfony propel:build-model
php symfony propel:build-forms

Seguiti da:

php symfony propel:build-sql

E troverete il file sql generato per la creazione del nostro database all’interno della directory data/sql sotto il nome di lib.model.schema.sql.
Siccome probabilmente questo file non sarà al 100% corretto e pronto all’inserimento, vi consiglio di aprilo e correggerlo a mano, usandolo solo come base.
Ultima cosa prima di partire sarà modificare il file config/databases.yml e trasformarlo nel seguente:

all:
  propel:
  class:  sfPropelDatabase
  param:
  dsn: mysql://user:password@localhost/database

Ovviamente adattando user, password e database alla vostra situazione.
Con la configurazione abbiamo finito, la prossima volta realizzeremo i controller della nostra applicazione. Alla prossima!

Tag: ,

3 Commenti a “symfony: back in action!”

  1. Questo articolo è stato segnalato su ZicZac.it….

  2. diggita.it scrive:

    symfony: back in action!…

    Dopo qualche giorno di pausa forzata dovuta ad impegni, torna più prepotente che mai il nostro caro vecchio symfony!

    Finalmente! Dopo le prime puntate dove ci siamo occupati più che altro di teoria, ora è giunto il momento di vedere davvero del cod…

  3. Paolo scrive:

    attendo con ansia la parte relativa alla validazione dei dati! fino a qui è tutto perfettamente chiaro! bravi!

Lascia un Commento