0 follower

Crea la tua prima applicazione con Yii

Per farti avere la prima esperienza con Yii, in questa sezione viene descritto come creare la tua prima applicazione con Yii. Utilizzeremo yiic (uno strumento a riga di comando) per creare una nuova applicazione Yii e Gii (potente generatore di codice ad interfaccia web) per automatizzare la generazione di codice per determinate attività. Per comodità, si da per scontato che YiiRoot sia la cartella in cui è installato Yii, e WebRoot sia la cartella radice del web server.

Eseguire yiic su riga di comando come segue:

% YiiRoot/framework/yiic webapp WebRoot/testdrive

Nota: Quando si esegue yiic su Mac OS, Linux or Unix, potrebbe essere necessario cambiare i permessi di esecuzione del file yiic per renderlo eseguibile. In alternativa, è possibile eseguire yiic come segue,

% cd WebRoot
% php YiiRoot/framework/yiic.php webapp testdrive

Questo creerà lo schema di una applicazione Yii all'interno della cartella WebRoot/testdrive. L'applicazione ha uno schema di cartelle che è richiesta dalla maggior parte delle applicazioni Yii.

Senza scrivere neanche una riga di codice PHP, possiamo provare la nostra prima applicazione Yii accedendo al seguente URL in un browser web:

http://hostname/testdrive/index.php

Come si può vedere, l'applicazione ha quattro pagine: la home page, la pagina del chi siamo, la pagina dei contatti e la pagina di login. La pagina dei contatti mostra un form di contatto che gli utenti possono compilare per presentare le loro richieste al webmaster, la pagina di login consente agli utenti di autenticarsi prima di accedere ai contenuti riservati. Guarda questi screenshot per maggiori dettagli.

Home page

Home page

Contact page

Contact page

Contact page with input errors

Contact page with input errors

Contact page with success message

Contact page with success message

Login page

Login page

Il seguente diagramma mostra la struttura delle cartelle della nostra applicazione. Si prega di consultare le Convenzioni per maggiori spiegazioni.

testdrive/
   index.php                 script di entrata della web application
   index-test.php            script di entrata per i test funzionali
   assets/                   contenitore dei file di risorse pubblicate
   css/                      contenitore dei file CSS
   images/                   contenitore dei file immagine
   themes/                   contenitore dei temi dell'applicazione
   protected/                contenitore dei file protetti dell'applicazione
      yiic                   script di riga di comando per Unix/Linux
      yiic.bat               script di riga di comando per Windows
      yiic.php               script di riga di comando in PHP
      commands/              contenitore di comandi 'yiic' personalizzati
         shell/              contenitore di comandi 'yiic shell' personalizzati
      components/            contenitore di componenti utente riutilizzabili
         Controller.php      classe di base per tutte le classi Controller
         UserIdentity.php    la classe 'UserIdentity' usata per l'autenticazione
      config/                contenitore dei file di configurazione
         console.php         configurazione della console dell'applicazione
         main.php            configurazione della web application
         test.php            configurazione dei test funzionali
      controllers/           contenitore dei file delle classi Controller 
         SiteController.php  classe Controller di default
      data/                  contenitore di database di esempio
         schema.mysql.sql    schema di esempio database MySQL
         schema.sqlite.sql   schema di esempio database SQLite
         testdrive.db        file di esempio database SQLite
      extensions/            contenitore estensioni di terze parti
      messages/              contenitore delle traduzioni dei messaggi
      models/                contenitore dei file delle classi Model
         LoginForm.php       il Model del form di login per l'Action di 'login'
         ContactForm.php     il Model del form di contatto per l'Action 'contact'
      runtime/               contenitore dei file generati temporaneamente
      tests/                 contenitore degli script di test
      views/                 contenitore dei file di View dei layout e dei Controller
         layouts/            contenitore dei file di View dei layout
            main.php         layout di base condiviso da tutte le pagine
            column1.php      layout per le pagine che utilizzano una singola colonna
            column2.php      layout per le pagine che utilizzano due colonne
         site/               contenitore dei file di View del Controller 'site'
            pages/           contenitore delle pagine "static" (statiche)
               about.php     la View della pagina "about"
            contact.php      la View della action 'contact'
            error.php        la View della action 'error' (visualizza errori esterni)
            index.php        la View della action 'index'
            login.php        la View della action 'login'

1. Connessione al database

La maggior parte delle web application si appoggiano ad un database. La nostra applicazione di prova non fa eccezione. Per utilizzare un database, occorre spiegare all'applicazione come connettersi con esso. Ciò viene fatto nel file di configurazione dell'applicazione WebRoot/testdrive/protected/config/main.php, evidenziato di seguito,

return array(
    ......
    'components'=>array(
        ......
        'db'=>array(
            'connectionString'=>'sqlite:protected/data/testdrive.db',
        ),
    ),
    ......
);

Il codice qui sopra spiega a Yii che l'applicazione dovrebbe connettersi, quando è necessario, al database SQLite WebRoot/testdrive/protected/data/testdrive.db. Si noti che il database SQLite è già incluso nella struttura dell'applicazione che è stata appena generata. Il database contiene una sola tabella che si chiama tbl_user:

CREATE TABLE tbl_user (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);

Se invece si vuole utilizzare un database MySQL, si può utilizzare il file che contiene lo schema MySQL WebRoot/testdrive/protected/data/schema.mysql.sql per creare il database.

Nota: per utilizzare la funzionalità database di Yii, è necessario abilitare le estensioni PDO di PHP ed il driver specifico per l'estensione PDO. Per l'applicazione di prova è necessario abilitare sia l'estensione php_pdo che php_pdo_sqlite.

2. Implementazione delle operazioni CRUD

Adesso arriva la parte divertente. Vorremmo implementare le operazioni CRUD (create, read, update and delete - crea, leggi, aggiorna e cancella) per la tabella tbl_user appena creata. Questa è una necessità tipica delle applicazioni. Invece di sobbarcarci l'onere di scrivere il codice necessario, utilizzeremo Gii -- un potente generatore di codice ad interfaccia web.

Informazione: Gii è stato reso disponibile a partire dalla versione 1.1.2. Prima di allora, per ottenere lo stesso risultato, è possibile utilizzare il citato strumento yiic. Per maggiori dettagli, si prega di fare riferimento a Implementare operazioni CRUD con la shell yiic.

Configurare Gii

Per poter utilizzare Gii, è necessario prima modificare il file WebRoot/testdrive/protected/config/main.php, noto come il file di configurazione dell'applicazione:

return array(
    ......
    'import'=>array(
        'application.models.*',
        'application.components.*',
    ),
 
    'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'inserire qui una password',
        ),
    ),
);

Poi visitare l'URL http://hostname/testdrive/index.php?r=gii. Verrà richiesta una password che dovrebbe essere quella che è stata appena personalizzata nel file di configurazione dell'applicazione qui sopra.

Generazione del Model User

Dopo il login, cliccare sul link Model Generator. Questo ci porterà sulla seguente pagina di generazione dei Model,

Model Generator

Model Generator

Nel campo Table Name digiater tbl_user. Nel campo Model Class digitare User. Poi cliccare sul bottone Preview. Questo ci farà vedere il nuovo file di codice che sarà generato. Adesso premere il bottoneGenerate. Un nuovo fiel chiamato User.php sarà generato all'interno della cartella protected/models. Come sarà spiegato più avanti in questa guida, questa classe del Model User ci permette di parlare con la tabella tbl_user del database sottostante in modalità object-oriented.

Generazione del codice CRUD

Dopo aver creato il file con la classe del Model, genereremo il codice che implementa le operazioni CRUD sui dati utente. Selezionare Crud Generator in Gii, come indicato di seguito,

CRUD Generator

CRUD Generator

Nel campo Model Class digitare User. Nel campo Controller ID digitare user (in minuscolo). Adesso premere il bottone Preview e poi il bottone Generate. Così abbiamo concluso con la generazione del codice per le funzionalità CRUD.

Accedere alle pagine CRUD

Godiamoci il nostro lavoro navigando verso il seguente URL:

http://hostname/testdrive/index.php?r=user

Verrà visualizzato l'elenco delle voci della tabella tbl_user.

Cliccare sul bottone Create User sulla pagina. Se non ci siamo autenticati in precedenza, saremo portati alla pagina di login. Dopo l'autenticazione verrà visualizzato un form che ci consente di aggiungere un nuovo utente. Compila il modulo e clicca sul bottone Create. Qualora ci sia un errore di input, verrà visualizzato un simpatico messaggio di errore che ci impedisce di salvare i dati inseriti. Tornando alla pagina di elenco degli utenti, dovremmo vedere apparire nella lista il nuovo utente.

Ripetere i passaggi precedenti per aggiungere altri utenti. Notare che la pagina della lista utenti verrà automaticamente suddivisa in più pagine se ci sono troppi utenti da visualizzare in una pagina sola.

Se ci autentichiamo come amministratori utilizzando le credenziali admin/admin, possiamo vedere la pagina dell'utente admin con il seguente URL:

http://hostname/testdrive/index.php?r=user/admin

Verranno visualizzate le voci degli utenti in un bel formato tabellare. Possiamo cliccare sull'intestazione della colonna per ordinare la tabella in base a quella colonna. Possiamo cliccare sui bottoni di ciascuna riga di dati visualizzati per visualizzare, aggiornare o cancellare la corrispondente riga di dati. Possiamo sfogliare diverse pagine. Possiamo anche filtrare e cercare i dati ai quali siamo interessati.

Tutte queste caratteristiche interessanti sono disponibili senza che ci sia la necessità di scrivere una sola riga di codice PHP!

User admin page

User admin page

Create new user page

Create new user page

Found a typo or you think this page needs improvement?
Edit it on github !