Enkel pakkehåndtering for CodeIgniter med gnister

Sparks er et nytt pakkehåndteringssystem for CodeIgniter som utvider kjernen med støtte for perleaktig gnister.

Denne opplæringen forveksler en oversiktsoversikt over arkitekturen og bruken av gnistsystemet med etableringen av dovecote-en enkel gnist for å administrere RSS-data.


Introduksjon

Pakker er blokker av resirkulerbar kode som kan gjøre utviklerens liv mye enklere.

CodeIgniter utviklere har lenge spredt seg over pakkeforvaltere som perler og npm, systemer som gir sine respektive lokalsamfunn verktøy og et sentralt lager for å utvikle, resirkulere og dele nyttige applikasjonskomponenter med hverandre. Nå er ventetiden over. Takket være et nytt system-gnister-CodeIgniter kan utviklere til slutt glede seg, da et voksende pakkehåndteringssystem endelig er sin egen.

Oversikt

Hvis du ikke har jobbet med dem før, tenk bare på pakker som blokker av resirkulerbar kode som kan gjøre utviklerens liv mye enklere. Kanskje trenger du et grensesnitt til en lagringsspand i Amazonas sky? Hopp over de sene nettene som helter over S3-dokumentasjonen og bare ta tak i gnisten.

Gnistsystemet består for sin del av tre deler:

  1. Et sentralt arkiv (getsparks.org) for lagring og deling av gnister
  2. Et verktøy for å håndtere gnistene installert i en gitt CodeIgniter app
  3. Gnister seg selv

I denne veiledningen vil vi introdusere de to første, men fokusere på gnistutvikling og noen grunnleggende hensyn når det gjelder å utvikle en gnist. Høres bra? La oss se hvordan det er gjort.


Trinn 1: Installere gnister

Det er offisielt: gnister er slated for integrasjon i CodeIgniter kjernen, muligens så snart som den kommende 2,1 utgivelsen. Men siden det ikke er en del av en standard installasjon, men du må sette systemet opp manuelt.

Hvis du er på OSX eller Linux, eller hvis du har PHPs kommandolinjegrensesnitt installert på Windows, er installasjonen så enkelt som å installere en ren kopi av CodeIgniter og utstede følgende i installasjonsmappen:

$ php -r "$ (curl -fsSL http://getsparks.org/go-sparks)"

Hvis alt gikk bra, bør du se noe slikt:

Hvis det av en eller annen grunn ikke fungerte, eller hvis du er på Windows og ikke har lagt til PHP i kommandobanen, kan du også installere gnister manuelt. Det er litt mer arbeid, men resultatet er det samme:

  1. Legge til en katalog som heter gnister i roten til kodeigniterkatalogen din
  2. Legge til en egendefinert Loader Class til application / kjerne / MY_Loader.php
  3. (valgfritt) Nedlasting og utvinning av gnister-kommandolinjeverktøyet i kodeigniterkatalogen

Din CodeIgniter-installasjon bør nå bli patched for å støtte gnister.


Trinn 2: Komme i gang

I middelalderens Europa, inkludert hvert herregården en liten uthus for duer å neste kalt en dovecote. Siden vi skal bygge en gnist som involverer både tweeting og feed, er navnet riktig nok. Men det oppfyller også det eneste kravet på navngivning: å bli inkludert i depotet på GetSparks.org,

GetSparks prosjektnavn må være unikt

Skarpe gnisten

Før vi kan kode, må vi opprette et prosjekt. I gnister katalog i roten til CodeIgniter-installasjonen din (opprett den, hvis den ikke finnes), legg til en ny mappe for å holde gnisten:

/ Gnister / dueslaget

Konvensjonen dikterer at gnister er organisert etter versjon, så vi trenger en undermappe for å holde det første utkastet. 0.0.1 er et godt sted å starte.

/sparks/dovecote/0.0.1

Denne mappen er hvor alle handlingene finner sted. Når resten av opplæringen refererer til vår "gnistkatalog", er dette den.

De spark.info Fil

Ting ser ganske nakne så langt, men vi er klare til å begynne å fylle dem ut. Det første stykket i gnisten - og den eneste filen teknisk nødvendig av gnistverktøyet er spark.info. Opprett en ny fil som heter spark.info i gnistkatalogen din, og legg til følgende:

navn: dovecote versjon: 0.0.1 kompatibilitet: 2.0.2 avhengigheter: Atomizer: 0.0.1 tags: ["twitter", "api", "social")

Disse feltene representerer all den informasjonen gnistverktøyet trenger for å håndtere versjonen og avhengighetene til alle gnistene i denne CodeIgniter-installasjonen. Verktøyet vil se etter fem ting, men bare de tre første er påkrevd:

  • Navn -- det unike gnist id
  • versjon -- gjeldende versjon
  • kompatibilitet -- minimum CodeIgniter versjon
  • avhengig -- (valgfritt) andre gnister som kreves av denne gnisten
  • tags -- (valgfritt) merker som beskriver denne gnisten

Selv om du ikke planlegger å bruke gnistverktøyet selv, er det fortsatt høflig å inkludere en spark.info filen med noen gnist du planlegger å distribuere. En av de reelle fordelene ved å håndtere gnister på denne måten, i stedet for å klistre dem direkte inn i gnister katalog, er at gnistbehandleren kan bruke kompatibilitets-, avhengighets- og versjoninformasjonen i hver gnist for å sikre fint spill med gjeldende CodeIgniter-installasjon - og hverandre. Det er også en fordel, som vi ser på et øyeblikk: gnister installert utenfor administrasjonsverktøyet må ha sine avhengigheter installert manuelt.

Organisere gnisten

Med info-filen skrevet, er det på tide å gi gnisten noe struktur. Opprett fire nye mapper i gnistkatalogen:

  • config
  • hjelpere
  • biblioteker
  • visninger

Hvis du har jobbet med CodeIgniter før, er dette trolig kjente navn. CodeIgniter s loader klasse behandler gnister som pakker, noe som betyr at innholdet i disse katalogene blir sjekket for eventuelle applikasjonskomponenter som ikke finnes i /applikasjon katalogen. For nå gjelder dette fem typer ressurser:

  • configs
  • hjelpere
  • biblioteker
  • modeller
  • visninger

Trinn 3: Skrive gnisten

Før vi begynner kodingen, ta et øyeblikk for å sikre at gnistkatalogen inneholder alle nødvendige brikkene.

Alt i orden? La oss fortsette.

Opprett en fil i den nylig opprettede config katalog og navn den dovecote.php. Vi lagrer noen grunnleggende alternativer her for å fortelle gnisten hvor den kan finne RSS-data:

Ikke mye til det - vi har definert et twitter brukernavn (@getsparks) for å få tak i tweets fra, gitt et API-sluttpunkt for Twitters Timeline API, og lagt til en ekstra nettadresse for å søke etter RSS-historier.

Nå vet gnisten hvor data kan bli funnet, det er på tide å hente frem noen feeder. For å gjøre dette må vi opprette et bibliotek - ring det dovecote.php-og lagre det i biblioteker katalogen:

ci = & get_instance ();  offentlig funksjon hente () // bygge twitter request URL $ twitterURL = sprintf ($ this-> alternativet ('twitterURL'), $ this-> alternativet ('twitter')); // få RSS Data $ tweets = $ this-> ci-> atomizer-> loadURL ($ twitterURL); $ feed = $ this-> ci-> atomizer-> loadURL ($ this-> alternativet ('feedURL')); // sett kanalinformasjon for ny feed $ info = array ('title' => 'Convolved feed'); // bland de to feeds sammen $ this-> tidslinje = $ feed-> convolve ($ tweets, $ info); returner $ this-> tidslinje;  offentlig funksjon publisering () header ('content-type: application / rss + xml'); ekko $ this-> tidslinje-> lagre ();  // hente et alternativ ($ key) fra config files beskyttet funksjonsalternativ ($ key) return $ this-> ci-> config-> item ($ key); ?>

Dette biblioteket gir hjelpefunksjoner for å hente alternativer fra vår config-fil og publisere et RSS-feed, men det kritiske stykket er hente(). Denne funksjonen tar tak i RSS-data fra leverandørene som er beskrevet i dovecotes konfigurasjonsfil i flere trinn:

  • Først blir adressen til Twitter RSS-feed generert. Config skisserte et brukernavn (twitter) og et sluttpunkt (twitterURL); nå blir de to kombinert med sprintf.
  • Deretter hentes RSS-dataene i hver feed ved hjelp av loadURL funksjonen atomizer bibliotek. Denne funksjonen returnerer en "AtomizerFeed"objekt som gir noen nyttige funksjoner for å manipulere RSS-data.
  • Endelig, AtomizerFeed's Slør Operasjonen brukes til å kombinere de to feeds-elementene i en enkelt feed, som returneres.
  • På dette tidspunktet er vi nesten klare til å skyte opp dovecote i et live-program. Vi må bare sjekke for at vår søknad inkluderer alle dovecotes avhengigheter, og at gnisten selv vil lastes inn riktig.


    Trinn 4: Avhengigheter

    Da vi skrev spark.info, minnes linjen der vi beskrev dovecotes avhengigheter:

Avhengigheter: Atomizer: 0.0.1

Dette betyr at dovecote er avhengig av en annen gnist-Atomizer-funksjon. Når gnister er forpliktet til getsparks.org-depotet, vil programvaren laste ned avhengigheter automatisk. Mens vi forblir i lokal utvikling, må vi imidlertid gjøre dette selv.

Hvis du bruker gnistbehandleren, kan du installere Atomizer ved å navigere til CodeIgniter-katalogen din og påkalle lederens installere funksjon:

php verktøy / gnist installasjon -v0.0.2 forstøver

Merk: Hvis du er på Windows, må du påkalle php verktøy \ spark install-v0.0.2 forstøver i stedet.

Hvis du ikke bruker sjefen, eller hvis installasjonen ikke ble fullført, kan du laste ned Atomizer fra Github og trekke den ut i søknadens gnister katalog ved siden av mappen som inneholder dovecote.


Trinn 5: Autolading

Før dovecote vil være tilgjengelig for andre deler av programmet, må vi sørge for at det lastes riktig. Gå tilbake til config-mappen i gnistkatalogen din og lim inn følgende i en ny fil som heter autoload.php.

Når CodeIgniter laster en gnist, vil den forsøke å laste inn alle ressursene som er oppført i autoload.php også. Dette gjør at gnistforfattere kan definere ressursene som brukerne skal ha umiddelbar tilgang til når de laster gnisten. Fordi det dueslaget bibliotek er spesifisert her, for eksempel vil vi ha umiddelbar tilgang til hente Funger så snart gnisten er lastet.

Det er verdt å nevne at ressursene beskrevet i autoload.php trenger ikke å ligge i gnistkatalogen. Så lenge de er plassert et sted i CodeIgniters søkebane, bør applikasjonen kunne finne dem. Legge merke til atomizer blir lastet i eksemplet ovenfor; det ville ikke gjøre så godt å liste en gnist avhengigheter, men ikke kunne laste dem!

Lagre autoload-filen, og la oss laste den opp. I velkomstregulatoren i hovedapplikasjonen din (/application/controllers/welcome.php), legg til følgende:

offentlig funksjon dovecote () $ this-> load-> spark ('dovecote / 0.0.1'); $ Dette-> dovecote-> hente (); $ Dette-> dovecote-> publisere (); 

La oss gå gjennom det:

  1. Vi ber CodeIgniter å laste doves, ved at alle ressursene forespurt i config / autoload.php vil bli lastet i tillegg
  2. dueslaget s hente funksjonen brukes til å få kopier av RSS-feeds som er beskrevet i config / dovecote.php
  3. Den kombinerte tidslinjen produsert av hente serveres som en RSS-feed ved hjelp av dovecote s publisere funksjon

Se det i aksjon

Bla til Velkommen / dueslaget i nettleseren din, og du bør bli møtt med en RSS-feed som beskriver tweets og artikler som dovecote har samlet.


Trinn 6: Bygg på gnisten

La oss gjøre dovecote litt mer nyttig. Først oppretter vi en grunnvisningsmal for å vise tittelen på hver artikkel i vår tidslinje:

 

Nylige hendelser:

  1. tittel; ?>

Deretter gjør vi visningen tilgjengelig ved å gi en hjelperfunksjon som andre deler av programmet kan bruke til å gjøre tidslinjen i HTML.

dovecote-> hente (); $ data = array ('items' => $ feed-> items ()); $ ci-> load-> view ('dovecote_timeline', $ data); ?>

De dovecote_timeline funksjon og dens eponymous syn kan nå brukes til å gjøre tidslinjen hvor som helst i vår søknad. Men i tråd med CodeIgniters eneste-hva-du-trenger filosofi, vil vi ikke gjøre det automatisk tilgjengelig via autoload.php. I stedet må vi laste hjelperen manuelt når det trengs. Gå tilbake til programmets velkomstkontroller, og oppdater dueslaget funksjon for å generere en HTML-versjon av feedet:

offentlig funksjon dovecote () $ this-> load-> spark ('dovecote / 0.0.1'); $ this-> load-> hjelper ('dovecote'); $ Dette-> dovecote-> hente (); // ring hjelperen ekko dovecote_timeline (); 

Oppdater nettleseren din, og du bør nå se en liste over alle elementene i dovecotes tidslinje.


Wrapping Up

Gratulerer! Du er nå eieren av en veldig enkel gnist, men det er mye mer som kan gjøres. Før du sender ut dovecote ut for handling, kan du vurdere å skrive tilleggsfunksjoner. Detaljerne er opp til deg, men noen nyttige funksjoner kan inkludere:

  • caching av API-responsene
  • visninger for å beautify dataene hentet
  • data utholdenhet for å lagre eldre tidslinjeposter (sjekk matelisensen først!)

Denne opplæringen gir de minste skissene om hva som kan gjøres med gnister og introduserer fordelene som gnister kan gi for å minimere gjentakelse og fremskynde utvikling.

Jobber du med en gnist selv? Har problemer startet ut? Del litt mer i kommentarene nedenfor og takk så mye for å lese!