Cum se programează cu Yii2 Lucrul cu baza de date și înregistrarea activă

Ce veți crea

Dacă vă întrebați: "Ce este Yii?" verificați tutorialul meu anterior: Introducere în Cadrul Yii, care analizează beneficiile lui Yii și include o prezentare generală a ceea ce este nou în Yii 2.0, lansat la 12 octombrie 2014.

În programarea cu Yii2: Noțiuni de bază, am creat Yii2 local, am construit o aplicație Hello World, am creat un server de la distanță și am folosit GitHub pentru a implementa codul nostru. În partea a doua, am aflat despre implementarea de către Yii a arhitecturii Model View Controller și despre modul de a construi pagini web și formulare care colectează și validează datele. În acest tutorial, vom folosi baza de date a Yii și capacitățile active de înregistrare pentru a automatiza generarea de coduri pentru o aplicație web de bază.

Pentru aceste exemple, vom continua să ne imaginăm că construim un cadru pentru afișarea actualizărilor de stare simple, de ex. propriul mini-Twitter.

1. Crearea bazei de date

În primul rând, trebuie să creăm o bază de date în mediul nostru de dezvoltare. Fac acest lucru prin intermediul interfeței de utilizator PHPMyAdmin a MAMP. Navigați la PHPMyAdmin, de ex. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, alegeți Baze de date și creați o bază de date numită Salut:

De asemenea, puteți utiliza interfața de comandă MySQL.

Acum, vom furniza acreditări de bază de date la fișierul de configurare a bazei de date Yii. Deschis /hello/config/db.php și furnizați acreditările bazei de date MySQL. Mine arata astfel:

 'username' => 'root', 'password' => 'parola', 'charset' => 'utf8', 'ds \ "]; 

Acum, vom crea prima noastră migrare de date. O migrare oferă o modalitate programată de a crea și actualiza schemele bazei de date. Este util mai ales dacă rulează pe mai multe servere sau în medii diferite. Elimină dificultatea de a importa scripturi SQL.

Pentru exemplele noastre de codificare, puteți folosi depozitul Git din ultimul tutorial de urmat sau puteți descărca repositoarea completă aici.

Creați migrarea

Prima noastră migrare va crea tabelul de stare. Deschideți terminalul și introduceți următoarele:

cd ~ / Sites / hello ./yii migrați / creați create_status_table

Ar trebui să arate așa, când ați terminat:

Când vă deschideți \ salut \ migrări, veți vedea un fișier numit similar m141201_013120_create_status_table.php. Ar trebui să arate așa cum se deschide:

Acesta este codul de migrare prestabilit furnizat de Yii. Apoi, îl vom actualiza pentru a furniza câmpurile de care avem nevoie.

Construirea tabelului de stare

Tabelul nostru de stare va stoca textul mesajului și va indica dacă o postare este privată sau publică. Fiecare rând va avea, de asemenea, un câmp id, crea și actualiza timp.

Actualizați codul de migrare la adresa noastră:

funcția publică sus () $ tableOptions = null; dacă ($ this-> db-> driverName === 'mysql') $ tableOptions = 'SETUL CHARACTERU utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB';  $ this-> createTable ('% status', ['id' => Schema :: TYPE_PK, 'message' => Schema :: TYPE_TEXT.NOTE DEFAULT " Schema :: TYPE_SMALLINT. 'NOT NULL DEFAULT 0', 'created_at' => Schema :: TYPE_INTEGER. 'NOT NULL', 'updated_at' => Schema :: TYPE_INTEGER 'NOT NULL',] $ tableOptions);  funcția publică jos () $ this-> dropTable ('% status'); 

Observați cum am adăugat definiții pentru câmpurile de care avem nevoie, cum ar fi mesaj, permisiuni, creat la, și updated_at.

Rulați migrarea

Pentru a le spune lui Yii să creeze masa, trebuie să executăm migrarea. Este ușor. Din Terminal din nou, alergăm ./ yii migrați / în sus:

$ .yy migrate / up Instrument de migrare Yii (bazat pe Yii v2.0.0) Total 1 nou migrare ce urmează a fi aplicată: m141201_013120_create_status_table Aplicați migrarea de mai sus? (da: nu): da *** aplicarea m141201_013120_create_status_table> crea tabelul % status ... făcut (timpul: 0.032s) *** aplicat m141201_013120_create_status_table (time: 0.038s). 

Dacă răsfoiți masa folosind PHPMyAdmin, ar trebui să vedeți ceva de genul:

Acum, că am creat tabela de baze de date, putem începe să folosim generatorul puternic de schelă Gii, Yii, pentru a automatiza toate codurile de vizualizare ale modelului.

2. Utilizarea Gii: Generatorul de cod Yii

Gii este generatorul de coduri pentru schele Yii. Acesta își folosește cunoștințele despre schema bazei de date pentru a genera un cod de control pentru vizualizarea corectă a modelului pentru aplicația dvs.. Gii poate transforma o schemă de bază de date într-o aplicație web de lucru de bază în câteva minute. Este incredibil de puternic. Permiteți-mi să vă arăt cum funcționează.

Construirea modelului

Cu Gii, începem prin construirea unui model bazat pe fiecare tabelă de baze de date pe care am creat-o. Pentru exemplul nostru, vom folosi tabela de stare.

Pentru a începe să utilizați Gii, navigați la aplicația web și adăugați-o / GII, de exemplu. http: // localhost: 8888 / Hello / web / GII. Veți vedea ceva de genul:

Click pe Model Generator, și intră stare în Numele tabelului camp:

Când faceți clic pe previzualizare, vă va arăta care fișiere se va construi. Deoarece deja avem un fișier model Status.php din ultimul tutorial, faceți clic pe Suprascriere. Apoi apasa Genera.

Rezultatele vor arăta astfel:

Deschide /hello/models/Status.php fișier și veți vedea regulile de validare de bază și atributele formularilor pe care Yii le-a construit:

 'ID', 'message' => 'Mesaj', 'permisiuni' => 'Permisiuni', 'create_at' => 'Creat la', 'updated_at' => 'Actualizat la';  

Construirea interfeței Web

Acum, este timpul să utilizați Gii pentru a construi controlerul și vizualizările pentru tabela de stare. Reveniți la pagina principală Gii și dați clic pe CRUD Generator, de exemplu. http: // localhost: 8888 / Hello / web / gii / Crud:

Pentru Model de clasă, introduce app \ modele \ Stare (aceste intrări sunt sensibile la minuscule). Pentru Căutați modelul de clasă, introduce app \ modele \ StatusSearch. Pentru Clasa de controlor, introduce Aplicația \ controlere \ StatusController. Ar trebui să arate astfel:

Clic previzualizare. Veți vedea următoarele - asigurați-vă că faceți clic pe Suprascriere din nou, deoarece avem fișiere mai vechi din ultimul tutorial care trebuie actualizate:

Când faceți clic pe Genera, veți vedea toate controlerul și vizualizați fișierele generate:

Paginile CRUD implicite

Navigați browserul dvs. la http: // localhost: 8888 / hello / web / status și veți vedea pagina index CRUD generată. Întrucât nu există încă rânduri în baza de date, va apărea gol.

Acum, faceți clic pe Creați statutul și veți vedea formatul de creare a stării de lucru prestabilit creat de Gii:

Este destul de uimitor cât de repede Gii creează codul de lucru pentru noi. Apoi, vom personaliza codul de schelă pentru a face acest lucru pentru noi.

3. Personalizarea codului nostru

Personalizarea vizualizării formularului

Să curățăm formularul. În /hello/views/Status/_form.php, eliminați câmpurile create și actualizate:

 câmpul ($ model, 'created_at') -> textInput ()?> câmpul ($ model, 'updated_at') -> textInput ()?> 

Înlocuiți câmpurile de permisiuni cu codul listei derulante pe care l-am creat în partea a doua a acestei serii:

câmpul (modelul $, permisiunile) -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Alegeți permisiunile'

Trebuie să o punem getPermissions funcționează și în model. Editați | × /hello/models/Status.php. Puneți înapoi definițiile și permisiunile constante:

 const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20; ... funcția publică getPermissions () retur array (auto :: PERMISSIONS_PRIVATE => 'privat', auto :: PERMISSIONS_PUBLIC => 'Public');  funcția publică getPermissionsLabel ($ permisiuni) if ($ permissions == self :: PERMISSIONS_PUBLIC) return 'Public';  altceva return 'Private'; 

Noul dvs. formular de stare ar trebui să arate astfel:

Trebuie să ajustăm regulatorul puțin pentru a face ca formularul să fie salvat în mod corespunzător.

Personalizarea controlerului

În /hello/controllers/StatusController.php, inlocuieste actionCreate cu acest cod:

funcția publică funcțiaCreate () $ model = new Status (); dacă ($ model-> încărcați (Yii :: $ app-> request-> post ())) $ model-> created_at = time (); $ model-> updated_at = timp (); dacă ($ model-> save ()) retur $ this-> redirect (['view', 'id' => $ model-> id]);  returnați $ this-> render ('create', ['model' => model $,]); 

Când formularul este postat, setăm manual creat la și updated_at câmpuri, apoi salvăm datele în baza de date. 

Când salvați prima dvs. actualizare de stare, veți vedea următoarea pagină de vizualizare:

Ajustarea aspectului

Să reajustăm navbar-ul astfel încât să nu coboare pentru Stare, ci să sară direct la pagina Index de stare. Editați | × /hello/views/layouts/main.php și înlocuiți Nav :: widget cod cu aceasta:

echo Nav :: widget (['opțiuni' => ['class' => 'navbar-nav navbar-right'], 'items' => [[ '/' / '/' / '/' / '/'), ' '/' / '/']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? => 'Logare', 'url' => ['/ site / login']]: ['label' => , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post']],],]);

Vizualizarea grilei

Când reveniți la afișarea indexului de stare, puteți vedea grila Yii2 umplută cu date:

Codul care generează această pagină este în /hello/views/status/index.php:

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

titlu)?>

render ('_ căutare', ['model' => $ searchModel]); ?>

"btn btn-succes"])>>

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

Dacă încercați să sortați coloanele și să vizualizați, actualizați și ștergeți pictograme, veți vedea că Gii a construit toată funcționalitatea acestor funcții.

Deci, în doar câteva minute, am creat o schemă pentru baza noastră de date și am generat un model și tot codul aplicației web necesare pentru o aplicație de bază. Sper că ați găsit capabilitățile de generare a codului Yii la fel de impresionante ca mine.

Ce urmeaza?

În continuare, vă vom arăta cum să integrați capabilitățile de înregistrare și de conectare a utilizatorilor în aplicația noastră, astfel încât să putem stabili relații de conectare între posturile de stare și utilizatorii anumiți.

Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @reifman pe Twitter sau verificați pagina de instructor Tuts +. Pagina mea de instructor va include toate articolele din această serie de îndată ce vor fi publicate.

Link-uri conexe

  • Site-ul web Yii
  • Introducere în Cadrul Yii (Tuts +) 
  • Alte exemple de dezvoltatori gratuite și Open Source Yii de autor
Cod