Hur man programmerar med Yii2 Explorerar MVC, formulär och layouter

Vad du ska skapa

I programmering med Yii2: Komma igång startade vi Yii2 lokalt, byggde ett Hello World-program, startade en fjärrserver och använde Github för att distribuera vår kod. Denna handledning kommer att täcka några av Yiis mer grundläggande begrepp relaterade till dess genomförande av MVC-ramen: Modeller, Visningar och Controllers. Vi utforskar också layouter och anpassning av navigeringsmenyer och Bootstrap-element.

För dessa exempel kan vi tänka oss att vi bygger ett ramverk för att skicka enkla statusuppdateringar, t.ex. vår egen mini-Twitter. Vi kommer emellertid inte att gå så långt som att lagra data i en databas. Jag sparar det för nästa handledning, som kommer att undersöka YiS ställningsfunktion, som heter Gii.

Gii automatiserar och förenklar allt vi gör i denna handledning, men det är viktigt att gå igenom de grundläggande begreppen och utföra dessa uppgifter manuellt minst en gång.

modeller

Vad är en modell? Wikipedia säger "A modell meddelar dess associerade vyer och kontroller när det har blivit en förändring i dess tillstånd. Denna anmälan låter synpunkterna producera uppdaterad utmatning och kontrollerna för att ändra den tillgängliga uppsättningen kommandon. "

För mig representerar modeller ofta begreppen vad jag bygger i den "yttre" världen. Så om vi tänker på statusuppdateringar kommer statusmodellen att innehålla alla egenskaper för en statusuppdatering och alla funktioner eller metoder som är relaterade till att fråga eller ändra status eller status. 

Bästa praxis är att bygga så mycket funktionalitet och intelligens i dina modeller som möjligt. I MVC-träning bygger du modeller "tunga" och kontrollerare och vyer. Yii ger några utmärkta funktioner som är specifika för de saker du gör i webb- och applikationsutveckling som förenklar modellbyggnaden, särskilt när det gäller former och databaser. mest av detta kommer vi att undersöka i senare handledning.

Låt oss skapa vår Status-modell. För våra kodningsexempel kan du använda Git-förvaret. Jag bygger på det vi skapade i handledningen Komma igång - jag har taggat den här som referens. Githubförvaret för den färdiga handledningen finns här.

Vi skapar Status.php i /hello/models/Status.php. För att skicka ett statusmeddelande måste vi samla texten i meddelandet från användaren. Vi skapar också ett behörighetsfält för inläggning offentligt eller privat.

'Privat', själv :: PERMISSIONS_PUBLIC => 'Public');  public function getPermissionsLabel ($ behörigheter) if ($ permissions == self :: PERMISSIONS_PUBLIC) returnera "Public";  annat returnera "Privat"; ?>

Observera reglerna funktionen-det används av Yiis formulärvalidering för att säkerställa att användarna anger relevant information i varje fält. Yii använder JavaScript för att validera formulär som användaren skriver.

De getPermissions () Funktionen som jag skapade kommer att användas för formulärens listrutningselement.

Låt oss nu gå vidare för att skapa en kontroller för att låta användaren skapa och se textuppdateringarna.

controllers

Vad är en kontroller? Wikipedia säger "A kontrollant kan skicka kommandon till modellen för att uppdatera modellens tillstånd (t.ex. redigera ett dokument). Det kan också skicka kommandon till dess associerade vy för att ändra visningsens presentation av modellen. "I en vanlig Yii-webbapplikation åberopas en URL-sökväg till en sida för att ladda data för sidan med hjälp av modellen och göra sidan använd Vyn. 

Det är bäst att logiskt gruppera relaterade funktioner inom en enda kontroller. Olika metoder för styrenheten, kallade åtgärder, implementera varje funktion. Dessa motsvarar ofta specifika sidor. Till exempel http: // localhost: 8888 / hej / webb / status / skapa kommer att åberopa StatusController skapande åtgärd som vi ska bygga.

När du utvecklar statusrelaterade funktioner grupperar du dessa funktioner inom en enda StatusController.php. För tillfället bygger vi bara en skapafunktion.

I / Hello / controllers /, skapa StatusController.php:

ladda (Yii :: $ app-> request-> post ()) && $ model-> validera ()) // giltiga data mottagna i $ modell returnera $ this-> render ('view', ['model' = > $ modell]);  annars // antingen sidan visas ursprungligen eller det finns någon valideringsfel returnera $ this-> render ('create', ['model' => $ modell]); ?>

Formskapsåtgärder påkallar vanligtvis modelldata och sedan gaffel beroende på om de ingår i en POST-operation eller ej. Om inte, visas den tomma blanketten. Om de får upplagd data, valideras och bearbetas de. I vårt fall betyder detta att du fortsätter att göra visningsfilen.

Visningar

Vad är en vy? Wikipedia säger "A se begär information från den modell som den använder för att generera en utmatningsrepresentation till användaren. "I Yii använder visningen ett PHP-liknande malspråk för att göra sidutmatningen till HTML, utnyttja data som laddas av modellen och levereras från kontrollenheten.

Visningar ligger vanligtvis inom en enda mapp relaterad till den tillhörande styrenheten, t.ex. StatusController-vyerna finns i visningar / status mapp.

I Yii ingår formkoden vanligtvis i vad som kallas en partiell vy. Dessa filer heter ofta med ett understreck prefix. De är avsedda att ingå i andra synpunkter. Detta gör att den verkliga formulärkoden kan återanvändas av skapa och uppdatera sidor.

Först gör vi den Skapa-vy som gör formuläret. Då skapar vi också en vy för visning för att visa oss den statusuppdatering som vi skickar in. I kommande tutorials, när vi arbetar med en faktisk databas, lagrar och hämtar data, kommer det att fungera lite annorlunda.

Här är ett enkelt exempel på vårt /hello/views/status.view.php visa fil för att göra upplagd data:

 

Din statusuppdatering

:

text)?>

:

getPermissionsLabel ($ modell-> behörigheter); ?>

Lägg märke till hur en visningsfil är en blandning av HTML och PHP. När regulatorn mottar upplagd data, gör den ovanstående vy och visar vilken data användaren lämnat in.

Men nu ska vi prata om former och bygga skapa formulärvisningsfilen.

formulär

Former är vad vi använder varje dag i webbutveckling för att samla in data från användaren, ofta för att skicka in användarinmatning till en databas. Yii ger en hel del hjälpkod för att förenkla processen att bygga, validera, säkra och publicera data från blanketter. I Yii är former en typ av syn.

Här är ett exempelformulär för att skapa en statusuppdatering:

  fält ($ modell, 'text') -> textArea (['rows' => '4']) -> etikett ('Statusuppdatering'); ?> fält ($ modell, behörigheter) -> dropDownList ($ model-> getPermissions (), ['prompt' => '- Välj dina behörigheter -'])>> 
'btn btn-primary'])?>

Yii2 ActiveForm-widgeten används för att generera HTML för våra inmatningsfält. Lägg märke till hur rullgardinsmenyn anropar statusmodellen getPermissions metod.

Genom att klicka på Submit-knappen återgår du till StatusControllers skapande åtgärd. När den upplagda data är mottagen, gör den sedan view.php-filen i stället för formatet create.php.

Så här visas visningsfilen när den görs med view.php:

Låt oss sedan uppdatera den globala navigeringsfältet för att inkludera länkar till formuläret Statusskapande.

layouter

Layouts är mallarna för de flesta av de yttre, upprepade elementen på en webbplats, såsom HTML-dokumentförpackningen, rubriken, navigeringsfältet och sidfoten. Eftersom dessa är vanliga för de flesta sidor på en webbplats, byggs de en gång i layouten och upprepas inte överallt i koden.

Om du tittar på \ Hello \ visningar \ layouter \ main.php, du kan se strukturen på den yttre layouten:

 startPage ()?>       <?= Html::encode($this->titel)?> huvud ()?>   beginBody ()?> 
'Mitt företag', 'brandUrl' => Yii :: $ app-> homeUrl, 'options' => ['class' => 'navbar-inverse navbar-fixed-top',],]); echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Hem', 'url' => '/ site / index']], ['label' => 'Om', 'url' => ['/ site / about']], ['label' => 'Kontakt', 'url' => '/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Logga in', 'url' => ['/ site / login']]: ['label' => 'Logga ut (' .Yii :: $ app-> användar-> identitet-> användarnamn. ')', 'Url' => ['/ site / logout'], 'linkOptions' => ['data-metod '=>' post ']],],]); NavBar :: ände (); ?>
isset ($ this-> params ['breadcrumbs'])? $ this-> params ['breadcrumbs']: [],])?>

© Mitt företag

endBody ()?> endPage ()?>

Visningar representerar mestadels sidans inre kroppar på en webbplats - vad är mellan rubriken och navigeringsfältet och början av sidfoten. De görs när layouten ekar $ innehåll:

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

Med Yii kan du bygga flera layouter per applikation, även om det inte alltid är nödvändigt. Det beror på din ansökan. Controllers erbjuder en standard layout och du kan åsidosätta detta för en viss åtgärd. Om dina kontrollörer logiskt grupperar relaterade aktiviteter är det troligt att användargränssnittet använder samma layout för alla åtgärder inom en kontroller.

Låt oss nu uppdatera navigeringsfältet för att inkludera en statusmeny med en "skapa" -åtgärd. Eftersom Yii2 använder Bootstrap för dess layouter och stilar, behöver vi bara berätta för att skapa en Bootstrap dropdown.

Uppdatera Nav :: widget att ha en kapslad grupp:

 echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Hem', 'url' => '/ site / index']], ['label' => 'Status', 'items' => [['label' => 'Skapa', 'url' => ['/ status / skapa']] ], ['label' => 'Om', 'url' => ['/ webbplats / om']], ['label' => 'Kontakt', 'url' => ['/ webbplats / kontakt '], Yii :: $ app-> user-> isGuest? [' Label '=>' Logga in ',' url '=> [' / site / login ']]: [' label '=>' Logga ut '. Yii :: $ app-> användar-> identitet-> användarnamn.') ',' Url '=> [' / site / logout '],' linkOptions '=> [' data-method '=>' inlägg ']],],]); 

Här är vad du bör se:

Vad kommer härnäst?

Nu när du vet lite om hur Yiis MVC-arkitektur fungerar i praktiken, inklusive modeller, visningar, kontroller, former och layouter, skapar vi ett databasschema för statuser och använder YiS ställningsgenerator, Gii, för att bygga allt detta automatiskt för oss. Saker kommer att börja flytta lite snabbare.

Om du vill veta när nästa Yii2 handledning kommer, följ mig @ reifman på Twitter eller kolla min Tuts + instruktörssida. Min instruktörssida kommer att innehålla alla artiklar från denna serie så snart de publiceras.

relaterade länkar

  • Yii Framework Website
  • Introduktion till Yii Framework (Tuts +) 
  • Programmering med Yii2: Komma igång (Tuts +)
  • Andra fri och öppen källkod Yii Developer Exempel av författaren