Come programmare con Yii2 lavorare con il database e il record attivo

Cosa starai creando

Se stai chiedendo "Cos'è Yii?" guarda il mio tutorial precedente: Introduzione al framework Yii, che rivede i vantaggi di Yii e include una panoramica delle novità di Yii 2.0, rilasciata il 12 ottobre 2014.

In Programming with Yii2: Getting Started, abbiamo configurato Yii2 localmente, creato un'applicazione Hello World, configurato un server remoto e utilizzato GitHub per implementare il nostro codice. Nella seconda parte, abbiamo appreso dell'implementazione di Yii della sua architettura Model View Controller e di come creare pagine Web e moduli che raccolgono e convalidano i dati. In questo tutorial, utilizzeremo il database di Yii e le capacità di registrazione attive per automatizzare la generazione di codice per un'applicazione Web di base.

Per questi esempi, continueremo a immaginare che stiamo costruendo un framework per la pubblicazione di semplici aggiornamenti di stato, ad es. il nostro mini-Twitter.

1. Creazione del database

Innanzitutto, dobbiamo creare un database nel nostro ambiente di sviluppo. Lo faccio tramite l'interfaccia utente web di PHPMyAdmin di MAMP. Passa a PHPMyAdmin, ad es. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, scegli il Banche dati scheda e creare un database chiamato Ciao:

È inoltre possibile utilizzare l'interfaccia della riga di comando MySQL.

Ora forniremo le credenziali del database al file di configurazione del database di Yii. Aperto /hello/config/db.php e fornire le credenziali del database MySQL. Il mio assomiglia a questo:

 'yii \ db \ Connessione', 'dsn' => 'mysql: host = localhost; dbname = hello', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8 ',]; 

Ora creeremo la nostra prima migrazione del database. Una migrazione fornisce un modo programmatico per creare e aggiornare schemi di database. È particolarmente utile se si esegue su più server o in ambienti diversi. Elimina la difficoltà di importare gli script SQL.

Per i nostri esempi di codice, puoi utilizzare il repository Git dell'ultimo tutorial da seguire, oppure puoi scaricare qui il repository completo.

Crea la migrazione

La nostra prima migrazione creerà la tabella di stato. Apri il Terminale e inserisci quanto segue:

cd ~ / Sites / hello ./yii migrate / create create_status_table

Dovrebbe assomigliare a questo, quando hai finito:

Quando si apre \ hello \ migrazioni, vedrai un file chiamato simile a m141201_013120_create_status_table.php. Dovrebbe apparire come questo una volta aperto:

Questo è il codice di migrazione predefinito fornito da Yii. Successivamente, lo aggiorneremo per fornire i campi di cui abbiamo bisogno.

Costruire la tabella di stato

La nostra tabella di stato memorizzerà il testo del messaggio e specificherà se un post è privato o pubblico. Ogni riga avrà anche un ID, creare e aggiornare i campi temporali.

Aggiorna il tuo codice di migrazione al nostro:

public function up () $ tableOptions = null; if ($ this-> db-> driverName === 'mysql') $ tableOptions = 'SET CARATTERE utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB';  $ this-> createTable ('% status', ['id' => Schema :: TYPE_PK, 'message' => Schema :: TYPE_TEXT. 'NOT NULL DEFAULT ""', 'permissions' => Schema :: TYPE_SMALLINT. 'NOT NULL DEFAULT 0', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER. 'NOT NULL',], $ tableOptions);  public function down () $ this-> dropTable ('% status'); 

Nota come abbiamo aggiunto le definizioni per i campi di cui abbiamo bisogno Messaggio, permessi, created_at, e updated_at.

Esegui la migrazione

Per dire a Yii di creare la tabella, dobbiamo eseguire la migrazione. È facile. Di nuovo dal terminal, corriamo ./ yii migrate / su:

$ ./yii migrate / up Yii Migration Tool (basato su Yii v2.0.0) Totale 1 nuova migrazione da applicare: m141201_013120_create_status_table Applicare la migrazione sopra? (sì | no) [no]: sì *** applicando m141201_013120_create_status_table> crea tabella % status ... done (time: 0.032s) *** applicato m141201_013120_create_status_table (time: 0.038s) Migrato con successo. 

Se navighi nella tabella usando PHPMyAdmin, dovresti vedere qualcosa di simile a questo:

Ora che abbiamo creato la tabella del database, possiamo iniziare a utilizzare il potente generatore di scaffolding di Gii, Yii, per automatizzare tutto il codice del controller della vista del modello.

2. Utilizzo di Gii: il generatore di codice Yii

Gii è il generatore di codice per scaffolding di Yii. Utilizza la propria conoscenza dello schema del database per generare codice del controller di visualizzazione modello predefinito ben scritto per la propria applicazione. Gii può trasformare uno schema di database in un'applicazione web di lavoro di base in pochi minuti. È incredibilmente potente. Lascia che ti mostri come funziona.

Costruire il modello

Con Gii, iniziamo con la costruzione di un modello basato su ogni tabella di database che abbiamo creato. Per il nostro esempio, useremo la tabella di stato.

Per iniziare a utilizzare Gii, accedi alla tua applicazione web e aggiungi / gii, per esempio. http: // localhost: 8888 / ciao / web / gii. Vedrai qualcosa di simile a questo:

Clicca su Generatore di modelli, ed entra stato nel Nome tabella campo:

Quando si fa clic Anteprima, ti mostrerà quali file costruirà. Dal momento che abbiamo già un file di modello Status.php dall'ultimo tutorial, fare clic su sovrascrivere. Quindi, fare clic creare.

I risultati saranno simili a questo:

Apri il /hello/models/Status.php file e vedrai le regole di convalida di base e gli attributi del modulo che Yii ha creato per noi:

 'ID', 'messaggio' => 'Messaggio', 'permessi' => 'Permessi', 'created_at' => 'Creato a', 'updated_at' => 'Aggiornato a',];  

Costruire l'interfaccia Web

Ora è il momento di usare Gii per costruire il controller e le viste per la tabella di stato. Torna alla home page di Gii e fai clic Generatore CRUD, per esempio. http: // localhost: 8888 / ciao / web / GII / CRUD:

Per Classe di modello, accedere app \ modelli \ Stato (queste voci fanno distinzione tra maiuscole e minuscole). Per Cerca la classe del modello, accedere app \ modelli \ StatusSearch. Per Controller Class, accedere app \ controllori \ StatusController. Dovrebbe sembrare come questo:

Clic Anteprima. Vedrai quanto segue: assicurati di fare clic sovrascrivere di nuovo poiché abbiamo file più vecchi dell'ultimo tutorial che devono essere aggiornati:

Quando si fa clic creare, vedrai tutto il controller e vedrai i file generati:

Le pagine CRUD predefinite

Spostare il browser in http: // localhost: 8888 / hello / web / status e verrà visualizzata la pagina dell'indice CRUD generata. Dal momento che non ci sono ancora righe nel database, apparirà vuoto.

Ora, clicca su Crea stato e vedrai il modulo di stato Crea predefinito creato da Gii:

È incredibile quanto velocemente Gii abbia creato codice funzionante per noi. Successivamente, personalizzeremo il codice del ponteggio per farlo funzionare per noi.

3. Personalizzazione del nostro codice

Personalizzazione della vista modulo

Puliamo il modulo. Nel /hello/views/Status/_form.php, rimuovere i campi creati e aggiornati:

 campo ($ model, 'created_at') -> textInput ()?> campo ($ model, 'updated_at') -> textInput ()?> 

Sostituisci il campo delle autorizzazioni con il codice dell'elenco a discesa che abbiamo creato nella seconda parte di questa serie:

field ($ model, 'permissions') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Scegli i permessi -'])?>

Dobbiamo mettere il GetPermissions funzione anche nel modello. modificare /hello/models/Status.php. Riporta le definizioni costanti e le funzioni di autorizzazione:

 const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20; ... public function getPermissions () return array (self :: PERMISSIONS_PRIVATE => 'Private', self :: PERMISSIONS_PUBLIC => 'Public');  public function getPermissionsLabel ($ permissions) if ($ permissions == self :: PERMISSIONS_PUBLIC) return 'Public';  else return 'Private'; 

Il tuo nuovo modulo di stato dovrebbe assomigliare a questo:

Abbiamo bisogno di aggiustare il controller un po 'per fare in modo che il modulo si salvi correttamente.

Personalizzazione del controller

Nel /hello/controllers/StatusController.php, sostituisci il ActionCreate metodo con questo codice:

funzione pubblica actionCreate () $ model = new Status (); if ($ model-> load (Yii :: $ app-> request-> post ())) $ model-> created_at = time (); $ model-> updated_at = time (); if ($ model-> save ()) return $ this-> redirect (['view', 'id' => $ model-> id]);  restituisce $ this-> render ('create', ['model' => $ model,]); 

Quando il modulo è pubblicato, impostiamo manualmente il created_at e updated_at campi, quindi salviamo i dati nel database. 

Quando salvi il tuo primo aggiornamento di stato, vedrai la seguente pagina di visualizzazione:

Regolazione del layout

Riaggiustiamo la barra di navigazione in modo che non scenda per Status ma salti direttamente alla pagina dell'indice di stato. modificare /hello/views/layouts/main.php e sostituire il Nav :: widget di codice con questo:

echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'About', 'url' => [ '/ site / about']], ['label' => 'Contatti', 'url' => ['/ sito / contatto']], Yii :: $ app-> utente-> isGuest? ['etichetta' => 'Login', 'url' => ['/ site / login']]: ['label' => 'Esci ('. Yii :: $ app-> utente-> identità-> nome utente. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post']],],]);

La vista a griglia

Quando si ritorna alla visualizzazione dell'indice di stato, è possibile visualizzare la griglia Yii2 piena di dati:

Il codice che genera questa pagina è in /hello/views/status/index.php:

title = 'Statuses'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?> 

titolo)?>

render ('_ search', ['model' => $ searchModel]); ?>

'btn btn-success']]?>

$ dataProvider, 'filterModel' => $ searchModel, 'columns' => [['class' => 'yii \ grid \ SerialColumn'], 'id', 'message: ntext', 'permessi', 'created_at', 'updated_at', ['class' => 'yii \ grid \ ActionColumn'],],]); ?>

Se provi l'ordinamento delle colonne e visualizzi, aggiorni e cancelli le icone, vedrai che Gii ha sviluppato tutte le funzionalità anche per queste funzioni.

Quindi, in pochi minuti, abbiamo creato uno schema per il nostro database e generato un modello e tutto il codice dell'applicazione Web necessario per un'applicazione di base. Spero che tu abbia trovato le capacità di generazione del codice di Yii impressionanti come me.

Qual'è il prossimo?

In seguito, ti mostrerò come integrare la registrazione degli utenti e le funzionalità di accesso nella nostra applicazione in modo da poter impostare le relazioni di join tra i post di stato e gli utenti specifici.

Se vuoi sapere quando arriverà il prossimo tutorial di Yii2, seguimi su @reifman su Twitter o controlla la mia pagina di istruttori + Tuts. La mia pagina di istruttore includerà tutti gli articoli di questa serie non appena saranno pubblicati.

Link correlati

  • Sito Web di Yii Framework
  • Introduzione al framework Yii (Tuts +) 
  • Altri esempi di sviluppatori Yii gratuiti e open source dell'autore