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.
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.
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
, eupdated_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, accedereapp \ modelli \ StatusSearch
. Per Controller Class, accedereapp \ 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:= $form->campo ($ model, 'created_at') -> textInput ()?> = $form->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:
= $form->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 ilActionCreate
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
eupdated_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 ilNav :: 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; ?>= Html::encode($this->titolo)?>
render ('_ search', ['model' => $ searchModel]); ?>= Html::a('Create Status', ['create'], ['class' => 'btn btn-success']]?>
= GridView::widget([ 'dataProvider' => $ 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