Programmering med Yii2 Routing og URL Creation

Hvis du spør, "Hva er Yii?" Sjekk ut Introduksjon til Yii Framework, som vurderer fordelene med Yii og inneholder en oversikt over Yii 2.0.

Introduksjon til ruting

I denne programmeringen med Yii2-serien, veileder jeg lesere i bruk av Yii2 Framework for PHP. 

I dagens veiledning vurderer jeg ruting og URL-opprettelse i Yii. Når en nettleserforespørsel kommer til Yii-programmets index.php-fil, må den analyseres for å bestemme hvilken kontroller og metode som skal ringes. Det er ruting. Den omvendte prosessen med å koble til deler av søknaden din er URL-opprettelse, som er best gjort programmatisk.

Yii gir mye fleksibilitet i styring av ruting og generering av lenker. Følg meg når jeg vurderer det grunnleggende.

Før vi begynner, vær så snill og husk, jeg prøver å delta i diskusjonene nedenfor. Hvis du har et spørsmål eller et emneforslag, vennligst legg inn en kommentar nedenfor eller kontakt meg på Twitter @ reifman. 

Merk: Hvis du la merke til gapet mellom episodene i Programming Yii series, er det fordi jeg måtte ha hjernekirurgi i fjor. Takk for tålmodigheten og støtten. Det er hyggelig å skrive igjen regelmessig, og jeg ser frem til fortsatt dekning av Yii2.

Bakgrunn

Yii's URL-administrasjon er programkomponenten som brukes til å analysere innkommende forespørsler, parseRequest (), samt generere nye nettadresser programmatisk, createUrl ().

Forespørsler blir analysert i ruter, som tar dette skjemaet:

ControllerID / ActionID

I hovedsak instruerer URL Manager Yii hvilken kontroller og handlingsmetode å opprette og påkalle.

I hele søknaden din må du opprette nettadresser som kan tolkes riktig når brukerne ber om det. Ved hjelp av createUrl () for dette sikrer at innkommende forespørsler kan velges.

Her er et eksempel:

bruk yii \ helpers \ Url; // Url :: til () samtaler UrlManager :: createUrl () for å opprette en URL $ url = Url :: til (['melding / visning', 'id' => 100]);

Uten et MVC-rammeverk, kan enhver PHP-fil i søknaden din svare direkte på forespørsler, noe som betyr at du må administrere sikkerhet på tvers av hver fil. Med MVC og URL-leder er grunnleggende sikkerhet gitt på sentralt nivå, og tilgang til søknaden din er ganske kontrollert. Dette er en av hovedårsakene til at du ikke bry deg om vanilje PHP-rammeverk rock!

La oss dykke inn i noen flere detaljer om dagens tema.

routing

Forespørsler fra brukere kommer gjennom nettleseren over nettet til serveren din i form av nettadresser. La oss se på en fra en bruker som ber om en påloggingsside i min oppstartsserie-applikasjon, møteplanlegger:

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

Programmet bruker ganske nettadresser i Yii (beskrevet nedenfor); Legg merke til færre spørringsvariabler. Uten det kan nettadressen se slik ut:

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

I alle fall, parseRequest behandler nettadressen og oppretter og påkaller SiteController.php med actionLogin ().

Med flotte nettadresser, vil nettadressebehandleren se på registrerte regler. I møteplanleggeren er de i den vanlige konfigurasjonsfilen:

'komponenter' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', ... 'rules' => ['/'=>'/ vis ','//'=>'/','/'=>'/',' defaultRoute '=>' / site / index ',],],

Hvis ingen regel samsvarer eller hvis det oppstår en feil når en kontroller og handling oppnås, vil et 404-feil, yii \ web \ NotFoundHttpException-unntak bli kastet.

Men over det er en defaultRoute satt til å gå til hjemmesiden på SiteController actionIndex, som vil dekke uovertruffen URL-forespørsler.

La oss se nærmere på et av reglene ovenfor:

'/'=>'/utsikt',

Det står at hvis du mottar en forespørsel om en kontroller etterfulgt av et ord (\ w+) etterfulgt av et skråstrek og et tall (\ d+), send forespørselen til kontrollerfilen med matchende navn og påkall actionView ($ id) med tallet, dvs.. møte / view / 130 samtaler MeetingController.php actionView (130).

Definere reglene dine er viktig og kan legge til eller forringe nettstedets samlede ytelse eller responstid. Du vil kanskje lære mer om Yi's avanserte parametrering av ruter for å optimalisere ytelsen. Skrive regler kan bli mer detaljert, som jeg ikke vil gå inn i i dag.

Pretty URLs

Som nevnt ovenfor bytter Pretty URLs fra Yii's parameterbaserte ruting til en banebasert ruting. For eksempel ber denne nettadressen om å vise et møte med ID 130.

https://meetingplanner.io/meeting/130

Eller denne nettadressen ber om å se et sted som heter El Diablo Coffee:

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

Du vil kanskje lese hvordan du programmerer med Yii2: Sluggable Behavior (Envato Tuts +) for å lære mer om implementering av snegler for å administrere slike nettadresser.

For å aktivere Pretty URLs må du aktivere enablePrettyUrl i urlManager:

'urlManager' => ['class' => 'yii \ web \ UrlManager', // Deaktiver index.php 'showScriptName' => false, // Deaktiver r = ruter 'enablePrettyUrl' => true, 'rules' => array ('/'=>'/ vis ','//'=>'/','/'=>'/',),],

Merk: På denne tiden kan du også deaktivere index.php i URL-adressen med showScriptName; Imidlertid sliter jeg fremdeles med å lage nettadresser uten index.php i mitt nåværende applikasjonsprosjekt. Sporing dette ned er på oppgavelisten min.

Du må også opprette en .htaccess-fil og aktivere mod_rewrite for Apache:

RewriteEngine on # Hvis en katalog eller en fil eksisterer, bruk den direkte RewriteCond% REQUEST_FILENAME! -F RewriteCond% REQUEST_FILENAME! -D # Ellers videresend den til index.php RewriteRule. index.php

CatchAll-modus

En annen fin funksjon av Yii ruting er muligheten til enkelt å legge søknaden din i vedlikeholdsmodus. Bare definer a CatchAll Innstilling i programkonfigurasjon, handling og visning:

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

Jeg har også lagt til en actionOffline i SiteController.php og en offline.php-visning.

Opprette nettadresser

Yii gir en hjelpemetode yii \ helpers \ Url :: til () for å opprette linker i din søknad som vil skje riktig med parsingsreglene. Generering av koblinger programmatisk med Yiis infrastruktur vil bidra til å opprettholde styrbarheten og overførbarheten til søknadskoden din.

Her er noen eksempler på å opprette nettadresser fra YiS dokumentasjon:

bruk yii \ helpers \ Url; // lager en URL til en rute: /index.php?r=post%2Findex echo Url :: til (['post / index']); // oppretter en URL til en rute med parametere: /index.php?r=post%2Fview&id=100 ekko Url :: til (['post / view', 'id' => 100]); // lager en forankret URL: /index.php?r=post%2Fview&id=100#content echo Url :: til (['post / vis', 'id' => 100, '#' => 'innhold'] ); // lager en absolutt nettadresse: http://www.example.com/index.php?r=post%2Findex echo Url :: til (['post / index'], true); // oppretter en absolutt nettadresse ved hjelp av https-skjemaet: https://www.example.com/index.php?r=post%2Findex echo Url :: til (['post / index'], 'https');

Selvfølgelig, hvis det riktige nettadresseprogrammet er aktivert, vil de opprettede nettadressene være forskjellige.

Her er et eksempel på meg som genererer en kobling i rutekontrollen til møtelisten for møteplanleggeren:

komme tilbake '
$ Modell> id]). '">'. $ Modell> lagt.
'. $ Modell> getMeetingParticipants ($ modell> id).
';

Jeg inkluderer også mange koblinger i utgående e-post for Meeting Planner, som krever en rekke identiske argumenter for å validere brukertilgang. Jeg opprettet en hjelper for å bygge disse kommandoene som bruker Url: til ():

klassen MiscHelpers offentlig oppfølgingsfunksjon buildCommand ($ meeting_id, $ cmd = 0, $ obj_id = 0, $ actor_id = 0, $ auth_key = ") returnering Url :: til (['møte / kommando', 'id' => $ meeting_id, 'cmd' => $ cmd, 'actor_id' => $ actor_id, 'k' => $ auth_key, 'obj_id' => $ obj_id], sant);

Å skrive rå PHP-kode for å manuelt opprette koblinger som disse, vil være tidkrevende, feilproblemer og mindre bærbare. Url :: til () sparer mye tid både i koding og feilsøking.

Merk: Jeg skal skrive om Yii hjelpere i en kommende episode. Ved å bruke en vanlig tilgjengelig funksjon i min hjelpeprogram, sparer jeg mye arbeid og reduserer generell koding.

I Avslutning

Komme i gang med en MVC kan være forvirrende og ruter og nettadresser kan spille en rolle i dette. Kanskje jeg burde ha skrevet om ruter tidligere i serien. I hvert fall håper jeg at du har lært noen nye ting om Yii og det fleksible programdesignet med ruter og nettadresser.

Se etter kommende opplæringsprogrammer i Programmering med Yii2-serien når vi fortsetter å dykke inn i ulike aspekter av rammen. For eksempel, gi meg beskjed hvis du vil se mer på avansert ruting. Jeg aksepterer funksjon og emneforespørsler. Du kan legge inn dem i kommentarene under eller sende meg en e-post på Lookahead Consulting.

Hvis du vil utforske et mer avansert Yii2-program nå, kan du se vår oppstartsserie og møteplanlegger. Søknaden er nå i alfa-utgivelse, og du kan bruke den til å planlegge møter med venner. Du kan også laste ned koden; det er åpen kildekode.

Hvis du vil vite når neste Yii2 opplæring kommer, følg meg @ reifman på Twitter eller sjekk min instruktørside. Min instruktørside vil inkludere alle artiklene fra denne serien så snart de er publisert. 

Relaterte linker

  • Ruting og URL Creation-Yii 2.0 Dokumentasjon
  • Slik programmerer du med Yii2: Sluggable Behavior (Envato Tuts +)
  • Yii2 Developer Exchange