Vista la semplicità con la quale è possibile realizzare applicativi web-based con Symfony, proviamo ora a implementare una piccola estensione della rubrica appena vista, con una base dati leggermente più complessa e rappresentata nella figura sottostante.
Seguiamo i passi illustrati nella lezione dedicata all'installazione.
- Copiamo la cartella sf_sandbox in c:wampwww e rinominiamo la directory in sf_rubrica2;
- apriamo il file sf_rubrica2configpropel.ini e sostituiamo nelle variabili propel.project e propel.output.dir la stringa sf_sandbox con sf_rubrica2;
- apriamo il file sf_rubrica2configproperties.ini e sostituiamo nella variabile name la stringa sf_sandbox con sf_rubrica2;
- apriamo il file sf_rubrica2configschema.yml ed includiamo il seguente codice:
Listato 21: Schema in YAML
propel:
nazione:
id: ~
nome: { type: varchar(255), required: true }
created_at: ~
provincia:
id: ~
nazione_id: ~
nome: { type: varchar(255), required: true }
created_at: ~
comune:
id: ~
provincia_id: ~
nome: { type: varchar(255), required: true }
created_at: ~
contatto:
id: ~
comune_id: ~
nome: { type: varchar(255), required: true }
cognome: { type: varchar(255), required: true }
data_nascita: { type: date }
telefono: { type: varchar(20), required: true }
cellulare: { type: varchar(20)}
email: { type: varchar(255) }
created_at: ~
e salviamolo;
- apriamo una shell DOS, portiamoci all'interno della directory c:wampwwwsf_rubrica2 e lanciamo i seguenti comandi in successione:
symfony propel:build-model
symfony configure:database "mysql:dbname=symfony_project;host=localhost" root mypassword
symfony propel:build-sql
symfony propel:insert-sql
symfony propel:build-forms
symfony propel:generate-module --non-verbose-templates --with-show frontend nazione Nazione
symfony propel:generate-module --non-verbose-templates --with-show frontend provincia Provincia
symfony propel:generate-module --non-verbose-templates --with-show frontend comune Comune
symfony propel:generate-module --non-verbose-templates --with-show frontend contatto Contatto
symfony cache:clear
Il gioco è fatto: l'applicazione rubrica è ora disponibile, nei suoi moduli Nazione, Provincia, Comune e Contatto ai seguenti indirizzi:
- http://localhost/sf_rubrica2/web/frontend_dev.php/nazione
- http://localhost/sf_rubrica2/web/frontend_dev.php/provincia
- http://localhost/sf_rubrica2/web/frontend_dev.php/comune
- http://localhost/sf_rubrica2/web/frontend_dev.php/contatto
Prima di poterla utilizzare però è necessario aggiungere un metodo alle classi Nazione, Provincia, Comune e Contatto che si trovano nella directory sf_rubrica2/lib/model per consentire di convertire un oggetto delle rispettive classi in stringa. Questo metodo viene utilizzato in fase di inserimento di un record dal momento che Symfony non è capace, a priori, di effettuare la conversione sopra citata.
Le righe riportate di seguito vanno aggiunte ai file Comune.php, Nazione.php, Provincia.php e Contatto.php
Listato 22.1: Funzione __toString da aggiungere alle classi del model
public function __toString()
{
return $this->getNome();
}
Il file Comune.php, ad esempio, dovrebbe diventare così:
Listato 22.2:Il file Comune.php modificato
<?php
class Comune extends BaseComune
{
public function __toString()
{
return $this->getNome();
}
}
L'applicativo così realizzato funziona perfettamente e consente l'inserimento, la modifica, la consultazione e l'eliminazione di una nazione, di una provincia collegata ad essa, di un comune appartenente ad una provincia e di un contatto legato ad un comune.