Als je vraagt: "Wat is Yii?" bekijk mijn eerdere tutorial: Introductie tot het Yii Framework, die de voordelen van Yii beoordeelt en een overzicht bevat van wat er nieuw is in Yii 2.0, uitgebracht op 12 oktober 2014.
In Programming with Yii2: Getting Started hebben we Yii2 lokaal ingesteld, een Hello World-applicatie gebouwd, een externe server opgezet en GitHub gebruikt om onze code te implementeren. In deel twee hebben we geleerd over Yii's implementatie van de Model View Controller-architectuur en hoe je webpagina's en formulieren kunt bouwen die gegevens verzamelen en valideren. In deze zelfstudie gebruiken we Yii's database en actieve opnamemogelijkheden om het genereren van de code voor een eenvoudige webtoepassing te automatiseren.
Voor deze voorbeelden blijven we ons voorstellen dat we een raamwerk bouwen voor het plaatsen van eenvoudige statusupdates, bijvoorbeeld onze eigen mini-Twitter.
Ten eerste moeten we een database maken in onze ontwikkelomgeving. Ik doe dit via MAMP's PHPMyAdmin web-gebruikersinterface. Navigeer naar PHPMyAdmin, bijv. http: // localhost: 8888 / MAMP / index.php? page = phpmyadmin, kies de databases tab en maak een database aan met de naam Hallo
:
U kunt ook de opdrachtregelinterface van MySQL gebruiken.
Nu zullen we databasereferenties aan het databaseconfiguratiebestand van Yii leveren. Open /hello/config/db.php
en geef uw MySQL-databasereferenties op. De mijne zien er zo uit:
'yii \ db \ Verbinding', 'dsn' => 'mysql: host = localhost; dbname = hallo', 'gebruikersnaam' => 'root', 'wachtwoord' => 'wachtwoord', 'charset' => 'utf8 ',];
Nu maken we onze eerste databasemigratie. Een migratie biedt een programmatische manier om databaseschema's te maken en bij te werken. Het is vooral handig als u op meerdere servers of in verschillende omgevingen werkt. Het elimineert de moeilijkheid van het importeren van SQL-scripts.
Voor onze codeervoorbeelden kunt u de Git-repository van de laatste zelfstudie gebruiken om mee te volgen, of u kunt de voltooide repository hier downloaden.
Onze eerste migratie zal de statustabel maken. Open Terminal en voer het volgende in:
cd ~ / Sites / hallo ./yii migreren / create_status_table maken
Het zou er zo uit moeten zien als je klaar bent:
Wanneer je opent \ Hello \ migraties
, je ziet een bestand met de naam similar to m141201_013120_create_status_table.php
. Het zou er zo uit moeten zien als het wordt geopend:
Dit is de standaardmigratiecode die Yii biedt. Vervolgens zullen we het bijwerken om de velden te bieden die we nodig hebben.
De statusentabel bouwen
In onze statustabel wordt berichttekst opgeslagen en wordt aangegeven of een bericht privé of openbaar is. Elke rij heeft ook een id, maak en update tijdvelden.
Update uw migratiecode naar de onze:
public function up () $ tableOptions = null; if ($ this-> db-> driverName === 'mysql') $ tableOptions = 'KARAKTER SET 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');Merk op hoe we definities hebben toegevoegd voor de velden die we nodig hebben, zoals
bericht
,toestemmingen
,gemaakt bij
, enupdated_at
.Voer de migratie uit
Om Yii te vertellen de tabel te maken, moeten we de migratie uitvoeren. Het is makkelijk. Van Terminal opnieuw, we rennen
./ yii migreren / omhoog
:$ ./yii migrate / up Yii Migration Tool (gebaseerd op Yii v2.0.0) Totaal 1 nieuwe migratie die moet worden toegepast: m141201_013120_create_status_table Pas de bovenstaande migratie toe? (ja | nee) [nee]: ja *** toepassen m141201_013120_create_status_table> tabel maken % status ... klaar (tijd: 0.032s) *** toegepast m141201_013120_create_status_table (tijd: 0.038s) Migratie succesvol uitgevoerd.Als u met PHPMyAdmin door de tabel bladert, ziet u ongeveer zoiets als dit:
Nu we de databasetabel hebben gemaakt, kunnen we de krachtige steigergenerator van Gii, Yii, gebruiken om alle modelaanzichtcontrollercode te automatiseren.
2. Gii gebruiken: de Yii-codegenerator
Gii is de steigercodegenerator van Yii. Het gebruikt zijn kennis van uw databaseschema om goed geschreven, standaard modelweergavecontrolecode voor uw toepassing te genereren. Gii kan een databaseschema in enkele minuten omzetten naar een eenvoudige webapplicatie. Het is ongelooflijk krachtig. Ik zal je laten zien hoe het werkt.
Het model bouwen
Met Gii beginnen we met het bouwen van een model op basis van elke databasetabel die we hebben gemaakt. Voor ons voorbeeld gebruiken we de tabel Status.
Als u Gii wilt gaan gebruiken, navigeert u naar uw webtoepassing en voegt u toe
/ gii
, bijv. http: // localhost: 8888 / hallo / web / GII. Je ziet zoiets als dit:Klik op Model Generator, en ga naar binnen
staat
in de Tafel naam veld:Wanneer u klikt Voorbeeld, het zal je tonen welke bestanden het zal bouwen. Omdat we al een Status.php-modelbestand van de laatste zelfstudie hebben, klikt u op beschrijven. Dan klikken voortbrengen.
De resultaten zien er als volgt uit:
Open de
/hello/models/Status.php
bestand en ziet u de basisvalidatieregels en formulierkenmerken die Yii voor ons heeft gebouwd:'ID', 'message' => 'Message', 'permissions' => 'Permissions', 'created_at' => 'Created At', 'updated_at' => 'Bijgewerkt bij',];De webinterface bouwen
Nu is het tijd om Gii te gebruiken om de controller en weergaven voor de statustabel te bouwen. Keer terug naar de Gii-startpagina en klik op CRUD-generator, bijv. http: // localhost: 8888 / hallo / web / GII / crud:
Voor Modelklasse, invoeren
app \ modellen \ Status
(deze vermeldingen zijn hoofdlettergevoelig). Voor Zoek modelklasse, invoerenapp \ modellen \ StatusSearch
. Voor Controller klasse, invoerenapp \ controllers \ StatusController
. Het zou er zo uit moeten zien:Klik Voorbeeld. U ziet het volgende - klik zeker beschrijven opnieuw omdat we oudere bestanden van de laatste zelfstudie hebben die moeten worden bijgewerkt:
Wanneer u klikt voortbrengen, je ziet alle gegenereerde controller- en weergavebestanden:
De standaard CRUD-pagina's
Navigeer door uw browser naar http: // localhost: 8888 / hallo / web / status en u ziet de gegenereerde CRUD-indexpagina. Omdat er nog geen rijen in de database staan, zal deze leeg lijken.
Klik nu op Maak status en je ziet het standaard Create Status Form dat Gii heeft gemaakt:
Het is best verbazingwekkend hoe snel Gii werkcode voor ons maakt. Vervolgens passen we de steigercode aan om dit voor ons te laten werken.
3. Aanpassen van onze code
De formulierweergave aanpassen
Laten we het formulier opschonen. In
/hello/views/Status/_form.php
, verwijder de gemaakte en bijgewerkte velden:= $form->field ($ model, 'created_at') -> textInput ()?> = $form->field ($ model, 'updated_at') -> textInput ()?>Vervang het toestemmingsveld door de drop-downlijstcode die we in deel twee van deze serie hebben gemaakt:
= $form->field ($ model, 'permissions') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Choose Your Permissions -'])?>We moeten de
getPermissions
functioneer ook terug in het model. Bewerk/hello/models/Status.php
. De constante definities en rechtenfuncties terugzetten:const PERMISSIONS_PRIVATE = 10; const PERMISSIONS_PUBLIC = 20; ... openbare functie getPermissions () return array (self :: PERMISSIONS_PRIVATE => 'Private', self :: PERMISSIONS_PUBLIC => 'Public'); openbare functie getPermissionsLabel ($ permissies) if ($ permissions == self :: PERMISSIONS_PUBLIC) return 'Public'; else retourneer 'Privé';Uw nieuwe statusformulier zou er als volgt uit moeten zien:
We moeten de controller een beetje aanpassen om het formulier correct op te slaan.
De controller aanpassen
In
/hello/controllers/StatusController.php
, vervang deactionCreate
methode met deze code:public function actionCreate () $ model = nieuwe 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]); return $ this-> render ('create', ['model' => $ model,]);Wanneer het formulier is gepost, stellen we handmatig de
gemaakt bij
enupdated_at
velden, dan slaan we de gegevens op in de database.Wanneer u uw eerste statusupdate opslaat, ziet u de volgende weergavepagina:
De lay-out aanpassen
Laten we de navigatiebalk opnieuw aanpassen, zodat deze niet naar beneden valt voor Status, maar direct naar de pagina Statusindex springt. Bewerk
/hello/views/layouts/main.php
en vervang deNav :: widget
code hiermee:echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'Over', 'url' => [ '/ site / about']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Inloggen', 'url' => ['/ site / login']]: ['label' => 'Uitloggen ('. Yii :: $ app-> gebruiker-> identiteit-> gebruikersnaam. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-methode' => 'post']],],]);De rasterweergave
Wanneer u terugkeert naar de statusindexweergave, ziet u het Yii2-raster dat is gevuld met gegevens:
De code die deze pagina genereert, staat in
/hello/views/status/index.php
:title = 'Statussen'; $ this-> params ['breadcrumbs'] [] = $ this-> title; ?>= Html::encode($this->titel)?>
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', 'permissions', 'created_at', 'updated_at', ['class' => 'yii \ grid \ ActionColumn'],],]); ?>Als u de pictogrammen voor het sorteren en weergeven, bijwerken en verwijderen van kolommen uitprobeert, ziet u dat Gii ook alle functionaliteit voor deze functies heeft gebouwd.
In slechts een paar minuten hebben we een schema voor onze database gemaakt en een model en alle webtoepassingscode gegenereerd die nodig is voor een basisapplicatie. Ik hoop dat je de mogelijkheden voor het genereren van code van Yii net zo indrukwekkend hebt gevonden als ik.
Wat is het volgende?
Vervolgens laat ik u zien hoe u gebruikersregistratie en aanmeldingsmogelijkheden kunt integreren in onze applicatie, zodat we verbindingsrelaties tussen statusberichten en specifieke gebruikers kunnen opzetten..
Als je wilt weten wanneer de volgende Yii2-zelfstudie aankomt, volg me dan @reifman op Twitter of bekijk mijn Tuts + -instructorpagina. Op mijn instructeurspagina staan alle artikelen uit deze serie zodra ze zijn gepubliceerd.
Gerelateerde Links