Programmering med Yii2 Routing och URL Creation

Om du frågar, "Vad är Yii?" checka ut Introduktion till Yii Framework, som granskar fördelarna med Yii och innehåller en översikt över Yii 2.0.

Introduktion till routing

I denna programmering med Yii2-serien guidar jag läsare som använder Yii2 Framework for PHP. 

I dagens handledning granskar jag routing och URL-skapelse i Yii. När en webbläsarförfrågan anländer till din Yii-programmets index.php-fil måste den analyseras för att bestämma vilken styrenhet och metod som ska ringas. Det är routing. Den omvända processen att länka till delar av din ansökan är URL-skapande, vilket bäst görs programmässigt.

Yii ger stor flexibilitet i hantering av routing och generering av länkar. Följ mig när jag granskar grunderna.

Innan vi börjar, kom ihåg, jag försöker delta i diskussionerna nedan. Om du har en fråga eller ett ämnesförslag, vänligen skriv en kommentar nedan eller kontakta mig på Twitter @ reifman. 

Obs! Om du märkte klyftan mellan episoderna för Programming Yii-serien, beror det på att jag måste ha hjärnkirurgi förra året. Tack för ditt tålamod och stöd - det är trevligt att skriva regelbundet igen, och jag ser fram emot att fortsätt att täcka Yii2.

Bakgrund

YiS webbadresshanterare är den applikationskomponent som används för att analysera inkommande förfrågningar, parseRequest (), samt generera nya webbadresser programmatiskt, createUrl ().

Förfrågningar analyseras i rutter, som tar detta formulär:

ControllerID / ActionID

I huvudsak instruerar URL Manager Yii vilken kontroller och åtgärdsmetod som ska skapas och åberopas.

Under hela din ansökan måste du skapa webbadresser som kan analyseras korrekt när användarna begär det. Använder sig av createUrl () för detta säkerställer att inkommande förfrågningar kan kartläggas med framgång.

Här är ett exempel:

använd yii \ helpers \ Url; // Url :: till () samtal UrlManager :: createUrl () för att skapa en URL $ url = Url :: till (['meddelande / visa', 'id' => 100]);

Utan en MVC-ram kan varje PHP-fil i din ansökan svara direkt på förfrågningar, vilket innebär att du måste hantera säkerhet över alla filer. Med MVC och URL-hanterare tillhandahålls grundläggande säkerhet på central nivå, och åtkomst till din ansökan är ganska kontrollerad. Detta är en av de viktigaste anledningarna att inte bry sig om vanilj PHP-ramverk rock!

Låt oss dyka in i några fler detaljer om dagens ämne.

routing

Begäranden från användare kommer via webbläsaren över webben till din server i form av webbadresser. Låt oss titta på en från en användare som begär en inloggningssida i mitt startprogramserbjudande, mötesplanerare:

https://meetingplanner.io/index.php/site/login

Min ansökan använder ganska webbadresser i Yii (beskrivs nedan); notera färre sökvariabler. Utan det kan webbadressen se ut så här:

https://meetingplanner.io/index.php?r=site/login

Hur som helst, parseRequest behandlar webbadressen och skapar och påminner SiteController.php med actionLogin ().

Med vackra webbadresser granskar webbadresshanteraren registrerade regler. I mötesplaneraren finns de i den gemensamma konfigurationsfilen:

'components' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', ... 'regler' => ['/'=>'/ visa ","//'=>'/','/'=>'/',' defaultRoute '=>' / site / index ',],],

Om ingen regel matchar eller om ett fel uppnår en kontroller och åtgärd, kommer ett 404-fel, yii \ web \ NotFoundHttpException-undantag att kastas.

Men ovanför finns en default inställd för att gå till hemsidan på SiteController actionIndex, som kommer att täcka oöverträffade URL-förfrågningar.

Låt oss se närmare på något av ovanstående regler:

'/'=>'/se',

Det står att om du får en begäran om en kontroller följt av ett ord (\ w+) följt av ett snedstreck och ett tal (\ d+), skicka den förfrågan till kontrollerfilen med motsvarande namn och anropa actionView ($ id) med siffran, dvs. möte / view / 130 samtal MeetingController.php actionView (130).

Att definiera dina regler är viktigt och kan lägga till eller förringa din webbplatss övergripande prestanda eller svarstid. Du kanske vill veta mer om Yiis avancerade parametrering av rutter för att optimera prestanda. Skrivningsregler kan bli mer detaljerade, vilket jag inte kommer att gå in i idag.

Nätt webbadresser

Som jag nämnde ovan byter Pretty URLs från Yiis parameterbaserade routing till en banbaserad routing. Till exempel begär denna URL-adress ett möte med ID 130.

https://meetingplanner.io/meeting/130

Eller begär den här URL-adressen en plats som heter El Diablo Coffee:

https://meetingplanner.io/place/el-diablo-coffee-co

Du kanske vill läsa Hur man programmerar med Yii2: Sluggable Behavior (Envato Tuts +) för att lära sig mer om att implementera sniglar för att hantera dessa typer av webbadresser.

För att aktivera vackra webbadresser måste du aktivera enablePrettyUrl i urlManager:

'urlManager' => ['class' => 'yii \ web \ UrlManager', // Avaktivera index.php 'showScriptName' => false, // Avaktivera r = rutter 'enablePrettyUrl' => true, 'rules' => array ('/'=>'/ visa ","//'=>'/','/'=>'/',),],

Notera: Vid den här tiden kan du också inaktivera index.php i webbadressen med showScriptName; Jag kämpar emellertid fortfarande med att skapa webbadresser utan index.php i mitt nuvarande applikationsprojekt. Spårning av detta är på min arbetslista.

Du måste också skapa en .htaccess-fil och aktivera mod_rewrite för Apache:

RewriteEngine on # Om en katalog eller en fil finns, använd den direkt RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # Annars vidarebefordra den till index.php RewriteRule. index.php

CatchAll-läge

En annan trevlig funktion av Yii-routing är möjligheten att enkelt placera din applikation i underhållsläge. Definiera bara a fånga alla inställning i programkonfiguration, åtgärd och visning:

 dirname (dirname (__ DIR__)). '/ vendor', 'language' => 'en', // engelska 'catchAll' => ['site / offline'], 'components' => ['urlManager' => 

Jag har också lagt till en actionOffline i SiteController.php och en offline.php-vy.

Skapa webbadresser

Yii tillhandahåller en hjälpmetod yii \ helpers \ Url :: till () för att skapa länkar inom din ansökan som korrekt motsvarar parsningsreglerna. Att generera länkar programmatiskt med Yiis infrastruktur hjälper dig att behålla hanterbarheten och överföringen av din programkod.

Här är några exempel på att skapa webbadresser från Yii dokumentation:

använd yii \ helpers \ Url; // skapar en URL till en rutt: /index.php?r=post%2Findex echo Url :: to (['post / index']); // skapar en URL till en rutt med parametrar: /index.php?r=post%2Fview&id=100 echo Url :: to (['post / view', 'id' => 100]); // skapar en förankrad URL: /index.php?r=post%2Fview&id=100#content echo Url :: till (['post / view', 'id' => 100, '#' => 'innehåll'] ); // skapar en absolut URL: http://www.example.com/index.php?r=post%2Findex echo Url :: till (['post / index'], true); // skapar en absolut webbadress med hjälp av https-schemat: https://www.example.com/index.php?r=post%2Findex echo Url :: till (['post / index'], 'https');

Naturligtvis, om det fina webbadressformatet är aktiverat, kommer de skapade webbadresserna att vara olika.

Här är ett exempel på mig som genererar en länk i möteslistens rutstyrning för mötesplaneraren:

lämna tillbaka '
$ Modell-> id]). ">". $ Modell-> ämne. "
'$ Modell-> getMeetingParticipants ($ modell-> ID).'
';

Jag innehåller också många länkar i utgående e-postmeddelanden för mötesplanerare, som kräver ett antal identiska argument för att validera användaråtkomst. Jag skapade en hjälpare för att bygga dessa kommandon som använder Url: till ():

klassen MiscHelpers public static function buildCommand ($ meeting_id, $ cmd = 0, $ obj_id = 0, $ actor_id = 0, $ auth_key = ") returnera Url :: till (['möte / kommando', 'id' => $ meeting_id, 'cmd' => $ cmd, 'actor_id' => $ actor_id, 'k' => $ auth_key, 'obj_id' => $ obj_id], sant);

Att skriva rå PHP-kod för att manuellt skapa länkar som dessa skulle vara tidskrävande, felaktiga och mindre bärbara. Url :: till () sparar mycket tid både vid kodning och felsökning.

Notera: Jag ska skriva om Yii hjälpare i ett kommande avsnitt. Att använda en allmänt tillgänglig funktion inom min hjälpreda sparar mig mycket ansträngning och minskar övergripande kodning.

I stängning

Att komma igång med en MVC kan vara förvirrande och rutter och webbadresser kan spela en roll i detta. Kanske borde jag ha skrivit om rutter tidigare i serien. Jag hoppas i alla fall att du har lärt dig några nya saker om Yii och dess flexibla applikationsdesign med rutter och webbadresser.

Titta på kommande tutorials i vår programmering med Yii2-serien när vi fortsätter att dyka in i olika aspekter av ramen. Till exempel, låt mig veta om du vill se mer om avancerad routing. Jag välkomnar funktion och ämnesförfrågningar. Du kan skicka in dem i kommentarerna nedan eller maila mig på min Lookahead Consulting webbplats.

Om du vill utforska en mer avancerad Yii2-applikation nu, kolla in vår startserie och mötesplanerare. Ansökan är nu i alfa-version, och du kan använda den för att schemalägga möten med vänner. Du kan också ladda ner koden; det är öppen källkod.

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

relaterade länkar

  • Routing och URL Creation-Yii 2.0 Dokumentation
  • Hur man programmerar med Yii2: Sluggable Behavior (Envato Tuts +)
  • Yii2 Developer Exchange