Hoe te programmeren met Yii2 Verkenning van MVC, formulieren en lay-outs

Wat je gaat creëren

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. Deze tutorial behandelt enkele van de meer elementaire concepten van Yii met betrekking tot de implementatie van het MVC-framework: modellen, views en controllers. We verkennen ook lay-outs en maatwerk van navigatiemenu's en Bootstrap-elementen.

Voor deze voorbeelden stellen we ons voor dat we een raamwerk bouwen voor het plaatsen van eenvoudige statusupdates, bijvoorbeeld onze eigen mini-Twitter. We gaan echter niet zo ver dat we de gegevens in een database opslaan. Ik zal dat bewaren voor de volgende tutorial, die Yii's steigermogelijkheid, Gii genaamd, zal verkennen.

Gii automatiseert en vereenvoudigt alles wat we in deze tutorial zullen doen, maar het is belangrijk om de basisbegrippen te doorlopen en deze taken minimaal één keer handmatig uit te voeren.

modellen

Wat is een model? Wikipedia zegt: "A model- waarschuwt de bijbehorende views en controllers wanneer zich een wijziging in de status heeft voorgedaan. Met deze melding kunnen de weergaven een bijgewerkte uitvoer produceren en de controllers om de beschikbare reeks opdrachten te wijzigen. "

Voor mij vertegenwoordigen modellen vaak de concepten van wat ik ook bouw in de "externe" wereld. Dus als we denken aan statusupdates, bevat het Statusmodel alle eigenschappen van een statusupdate en alle functies of methoden die gerelateerd zijn aan het opvragen of wijzigen van een status of statussen. 

Best practice is om zoveel mogelijk functionaliteit en intelligentie in uw modellen te bouwen. In de MVC-praktijk bouw je modellen "zwaar" en controllers en ziet je licht. Yii biedt enkele uitstekende functies die specifiek zijn voor het soort dingen dat u doet in web- en applicatieontwikkeling, die modelbouw vereenvoudigen, vooral als het gaat om formulieren en databases; de meeste hiervan zullen we in latere tutorials onderzoeken.

Laten we ons Statusmodel maken. Voor onze codeervoorbeelden kunt u de Git-repository gebruiken. Ik bouw voort op wat we hebben gemaakt in de handleiding Aan de slag-ik heb het hier getagd ter referentie. De Github-repository voor de voltooide zelfstudie is hier.

We zullen Status.php aanmaken in /hello/models/Status.php. Om een ​​statusbericht te plaatsen, moeten we de tekst van het bericht van de gebruiker verzamelen. We zullen ook een toestemmingsveld maken om openbaar of privé te plaatsen.

'Private', self :: PERMISSIONS_PUBLIC => 'Public');  openbare functie getPermissionsLabel ($ permissies) if ($ permissions == self :: PERMISSIONS_PUBLIC) return 'Public';  else retourneer 'Privé'; ?>

Let op de regelsfunctie: deze wordt gebruikt door Yii's formuliervalidatie om ervoor te zorgen dat gebruikers de juiste informatie in elk veld invoeren. Yii gebruikt JavaScript om formulieren te valideren naarmate de gebruiker typt.

De getPermissions () De functie die ik heb gemaakt, wordt gebruikt voor de vervolgkeuzelijstelementen van het formulier.

Laten we nu een controller maken om de gebruiker de tekstupdates te laten maken en bekijken.

Controllers

Wat is een controller? Wikipedia zegt: "A controleur kan commando's naar het model sturen om de staat van het model bij te werken (bijvoorbeeld het bewerken van een document). Het kan ook opdrachten verzenden naar de bijbehorende weergave om de presentatie van het aanzicht van het model te wijzigen. "In een typische Yii-webtoepassing roept een URL-pad naar een pagina een controller op om de gegevens voor de pagina te laden met behulp van het model en de pagina te renderen met behulp van het uitzicht. 

Het is het beste om gerelateerde functies logisch te groeperen binnen een enkele controller. Verschillende methoden van de controller, acties genaamd, implementeren elke functie. Deze komen vaak overeen met specifieke pagina's. Bijvoorbeeld: http: // localhost: 8888 / hello / web / status / create roept de actie van de StatusController aan die we gaan bouwen.

Terwijl u statusgerelateerde functies ontwikkelt, groepeert u deze functies in een enkele StatusController.php. Voor nu bouwen we gewoon een creëerfunctie.

In / Hallo / controllers /, maak StatusController.php aan:

load (Yii :: $ app-> request-> post ()) && $ model-> validate ()) // geldige gegevens ontvangen in $ model return $ this-> render ('view', ['model' = > $ model]);  else // de pagina wordt in eerste instantie weergegeven of er is een validatiefout geretourneerd $ this-> render ('create', ['model' => $ model]); ?>

Formuliercreatie-acties roepen meestal de modelgegevens op en vervolgens de vork, afhankelijk van of ze deel uitmaken van een POST-bewerking of niet. Zo niet, dan wordt het lege formulier weergegeven. Als ze geposte gegevens ontvangen, worden ze gevalideerd en verwerkt. In ons geval betekent dit dat het weergavebestand wordt gerenderd.

Keer bekeken

Wat is een uitzicht? Wikipedia zegt: "A uitzicht vraagt ​​informatie aan van het model dat het gebruikt om een ​​uitvoerrepresentatie voor de gebruiker te genereren. "In Yii gebruikt de weergave een PHP-achtige sjabloontaal om de pagina in HTML te renderen, waarbij gegevens worden gebruikt die door het model zijn geladen en van de controller worden afgeleverd.

Weergaven bevinden zich meestal in een enkele map die gerelateerd is aan de bijbehorende controller, bijvoorbeeld de StatusController-weergaven bevinden zich in de views / statuut map.

In Yii is de vormcode meestal opgenomen in een zogenaamde gedeeltelijke weergave. Deze bestanden hebben vaak een naam met een onderstreping voorvoegsel. Ze zijn bedoeld om te worden opgenomen door andere weergaven. Hierdoor kan de eigenlijke formuliercode opnieuw worden gebruikt door de maak- en bijwerkpagina's.

Eerst maken we de weergave Maken die het formulier weergeeft. Vervolgens maken we ook een weergave Weergave om ons de statusupdate te laten zien die we plaatsen. In komende tutorials werkt dit iets anders als we met een echte database werken en de gegevens opslaan en ophalen..

Hier is een eenvoudig voorbeeld van onze /hello/views/status.view.php bekijk bestand om geposte gegevens weer te geven:

 

Uw statusupdate

:

tekst)?>

:

getPermissionsLabel ($ model-> toestemmingen); ?>

Merk op hoe een weergavebestand een mix is ​​van HTML en PHP. Wanneer de controller geposte gegevens ontvangt, wordt de bovenstaande weergave weergegeven en wordt weergegeven welke gegevens de gebruiker heeft verzonden.

Laten we het nu hebben over formulieren en het weergavebestand voor het maken van een formulier maken.

vormen

Formulieren zijn wat we dagelijks gebruiken in webontwikkeling om gegevens van de gebruiker te verzamelen, vaak om gebruikersinvoer in een database in te dienen. Yii biedt een grote hoeveelheid helpercode om het proces van het bouwen, valideren, beveiligen en posten van gegevens uit formulieren te vereenvoudigen. In Yii zijn vormen een soort weergave.

Hier is een voorbeeldformulier voor het maken van een statusupdate:

  field ($ model, 'text') -> textArea (['rows' => '4']) -> label ('Status Update'); ?> field ($ model, 'permissions') -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Choose Your Permissions -'])?> 
'btn btn-primary'])?>

De Yii2 ActiveForm-widget wordt gebruikt om HTML te genereren voor onze invoervelden. Merk op hoe de vervolgkeuzelijst het Statusmodel oproept getPermissions methode.

Als u op de knop Verzenden klikt, keert u terug naar de actie Create van de StatusController. Wanneer de geposte gegevens worden ontvangen, wordt vervolgens het bestand view.php weergegeven in plaats van het formulierbestand create.php.

Hier is hoe het weergavebestand wordt weergegeven wanneer het wordt weergegeven met view.php:

Laten we vervolgens de algemene navigatiebalk bijwerken met koppelingen naar het formulier Status status.

lay-outs

Lay-outs zijn de sjablonen voor de meeste buitenste, herhaalde elementen van een website, zoals de HTML-document-wrapper, koptekst, navigatiebalk en voettekst. Omdat deze voor de meeste pagina's van een website hetzelfde zijn, worden ze eenmaal in de lay-out ingebouwd en niet overal in de code herhaald.

Als je kijkt \ Hello \ uitzicht \ layouts \ main.php, je kunt de structuur van de buitenste lay-out bekijken:

 beginpagina ()?>       <?= Html::encode($this->titel)?> hoofd ()?>   beginBody ()?> 
'Mijn bedrijf', 'brandUrl' => Yii :: $ app-> homeUrl, 'options' => ['class' => 'navbar-inverse navbar-fixed-top',],]); echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Over', 'url' => ['/ site / about']], ['label' => 'Contact', 'url' => [ '/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Inloggen', 'url' => ['/ site / login']]: ['label' => 'Afmelden ('. Yii :: $ app-> gebruiker-> identiteit-> gebruikersnaam. ')', 'Url' => ['/ site / logout'], 'linkOptions' => ['data-methode '=>' plaatsen ']],],]); NavBar :: uiteinde (); ?>
isset ($ this-> params ['breadcrumbs'])? $ this-> params ['breadcrumbs']: [],])?>

© Mijn bedrijf

endBody ()?> endPage ()?>

Weergaven vertegenwoordigen meestal de binnenste pagina's van een website, wat er tussen de koptekst en de navigatiebalk en het begin van het voettekstje staat. Ze worden weergegeven wanneer de lay-out weerkaatst $ inhoud:

 
isset ($ this-> params ['breadcrumbs'])? $ this-> params ['breadcrumbs']: [],])?>

Met Yii kunt u meerdere lay-outs per toepassing maken, hoewel dit niet altijd nodig is. Het hangt van uw toepassing af. Controllers bieden een standaardlay-out en u kunt dit voor een bepaalde actie overschrijven. Als uw controllers gerelateerde activiteiten logisch groeperen, is het waarschijnlijk dat de gebruikersinterface dezelfde lay-out gebruikt voor alle acties in een controller.

Laten we nu de navigatiebalk bijwerken met een statusmenu met een actie 'maken'. Omdat Yii2 Bootstrap gebruikt voor zijn lay-outs en stijlen, hoeven we het alleen maar te vertellen om een ​​vervolgkeuzelijst Bootstrap te maken.

Werk het Nav :: widget een geneste array hebben:

 echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Status', 'items' => [['label' => 'Maken', 'url' => ['/ status / maken']], ],], ['label' => 'Over', 'url' => ['/ site / over']], ['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 '=>' plaatsen ']],],]); 

Dit is wat u zou moeten zien:

Wat is het volgende?

Nu je een beetje weet hoe de MVC-architectuur van Yii in de praktijk werkt, inclusief modellen, weergaven, controllers, formulieren en lay-outs, zullen we een databaseschema voor statussen maken en Yii's steigermachine Gii gebruiken om dit allemaal automatisch te bouwen voor ons. Dingen zullen een beetje sneller gaan bewegen.

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

  • Yii Framework Website
  • Introductie van het Yii Framework (Tuts +) 
  • Programmeren met Yii2: Aan de slag (Tuts +)
  • Andere gratis en open source Yii-ontwikkelaarsvoorbeelden door de auteur