Komme i gang med Fuel PHP Framework

Denne todelte opplæringen får deg til å komme i gang med Fuel PHP-rammeverket. Vi begynner med det grunnleggende, og deretter gå videre til noen mer avanserte emner i del to! La oss komme i gang.


Introduksjon

Brensel er et nytt PHP Framework bygget spesielt for PHP 5.3, som bruker den velprøvde MVC-arkitekturen for logisk kodeseparasjon og kombinerer de beste ideene til noen eksisterende rammer med forbedringer og ideer av seg selv. En siste v1.0 er bare nylig utgitt, men allerede har rammen et stort etter at ni måneder har utviklet seg tungt. Denne artikkelen vil gi deg fart på hvordan du lager nettsteder med drivstoff - men først, la oss snakke litt om arkitekturen.

Forstå MVC

MVC-arkitekturen (Model-View-Controller) brukes av mange eksisterende rammer som CodeIgniter, Zend Framework, Symphony og Ruby on Rails. Hvis du er kjent med noen av disse rammene, har du en start!

For de som er ny på denne arkitekturen, er MVC en tilnærming til å skille koden din, avhengig av hvilken rolle den spiller i søknaden din. I applikasjonsflyten starter den med en kontroller som er lastet av drivstoff. En metode blir deretter utført som utarbeider hvilke data som skal hentes ved hjelp av en modell. Når det er gjort, kan kontrolløren bestemme hvilken visning (er) å laste (hvis noen). Visninger inneholder produksjonen dine besøkende får se, AJAX-svar eller feilmeldinger.

En mer grundig forklaring på MVC fra drivstoffets perspektiv finnes i brensel MVC dokumentasjonen; så vi hopper over til de gode greiene.

Vi starter med noen av de grunnleggende om å få helt nye brukere til å gå. Hvis noe av dette virker åpenbart, vennligst hopp ned litt for å komme til noen av de mer spennende funksjonene.


Trinn 1: Installasjon

Installasjon er like enkelt som å ta tak i en kopi fra GitHub eller laste ned en ZIP fra nettstedet. Du kan også bruke en-liner-installasjon hvis du bruker et * nix-system, for eksempel Linux, Mac OS X, etc som krever at Git skal kjøre. Installere Git er ganske enkelt, og gjør ting mye lettere når du utvikler programmene dine:

$ curl get.fuelphp.com/oil | sh

Dette vil installere en svært begrenset versjon av "olje", som er navnet på kommandolinjeverktøyet du kan bruke når du arbeider med drivstoffapplikasjoner. Denne avkortede versjonen kan brukes til å lage programmer:

$ olje skape blogg

Dette vil opprette en bloggmappe i din nåværende katalog som vil inneholde basisrammen. Hvis du kommer over problemer, så ta en titt på de mer detaljerte installeringsinstruksjonene.

Forutsatt at du kjørte denne kommandoen i din lokale server web rot, bør vi kunne bla gjennom til http: // localhost / test / offentlig og se Velkomstsiden.

Filstruktur

Roten til søknaden din skal inneholde tre hovedpunkter:

  • brensel/ - Hvor alle dine PHP-koder kommer til å leve.
  • offentlig/ - Alt du vil være direkte tilgjengelig i nettleseren, så JS, CSS, bilder osv.
  • olje - En kjørbar, som er en mer funksjonell versjon av oljen installert tidligere, som kan kjøre kommandolinjeoppgaver som generering av kode eller interaktiv feilsøking i søknaden din. Det er valgfritt, så du kan slette det hvis du ikke liker kommandolinjen.

Innenfor drivstoff / vi har noen viktige mapper:

  • app / - Alle programspesifikke PHP-koden går inn her, inkludert dine Modeller, Visninger og Controllers.
  • kjerne/ - Det er her Brensel selv lever. Hvis du bruker Git, vil dette bli en delmodul som lett kan oppdateres.
  • pakker / - Drivstoff skiller ut visse logikk inn i pakker for å unngå oppblåsthet av kjernen. Fuel inneholder som standard tre pakker: olje, auth og orm. Disse pakkene lastes ikke inn med mindre du trenger dem, så vi filtrerer dem senere.

Den viktige delen her er appen / mappen:

  • config / - Konfigurasjonsfiler for ulike klasser og den generelle "config.php" -filen bor her.
  • klasser / - Det er her alle Controllers, Models, hjelperklasser, forretningslogikbiblioteker, osv. Vil gå. Hvis du trenger å skrive en klasse for å bruke i koden din, vil den trolig gå inn her. Navnene er små bokstaver.
  • -timer / styreenhet / - Det er her kontrollører er plassert.
  • klasser / modell / - Plassering for modellene dine, selv om de egentlig bare er bare en annen klasse.
  • visninger / - Sett visningsfilene dine inn her i mapper eller bare i roten. Det er ingen spesifikke navngivningskonvensjoner for visninger.

Før vi går gjennom mer teori, la oss skrive noen kode.


Trinn 2: Hei Verden

La oss slette brensel / app / timer / styreenhet / welcome.php kontrolleren og lage vår egen, kalt hello.php.

I den filen legger du til følgende kode:

klasse Controller_Hello utvider Controller offentlig funksjon action_index () echo "Hello World!"; 

Nå hvis vi blar til http: //localhost/test/public/index.php/hello, du bør se "Hello World!" utdata til nettleseren. De action_ prefix forteller oss at dette er en rutebasert metode og ikke noen tilbakeringing eller annen delt metode, og betyr at du kan bruke metodenavn, som "liste" uten at PHP blir forvirret.

Hvis vi vil ha denne hei kontrolleren til å være vår "root" kontroller i stedet for det nå borte welcome.php, vi trenger bare å åpne drivstoff / app / config / routes.php og endre _root_ rute som så:

returnere array ('_root_' => 'hei', // Standard rute);

Din første visning

Lag en fil drivstoff / app / visninger / hello.php og legg til:

 

Hallo!

Hei , hvordan går det?

Deretter endrer du kontrolleren litt:

klasse Controller_Hello utvider Controller offentlig funksjon action_index () echo "Hello World!";  offentlig funksjon action_buddy ($ name = 'kompis') $ this-> response-> body = Vis :: fabrikk ('hallo', array ('navn' => $ navn,);

Nå, hvis du laster http: //localhost/test/public/index.php/hello/buddy eller http: //localhost/test/public/index.php/hello/buddy/John , du vil se $ name variabel blir passert gjennom fra metoden til utsikten. I bunn og grunn ekstrakt() kjøres på utsikten.


Trinn 3: Grunnleggende konfigurasjon

Som du kan se, kan brensel gjøre grunnleggende kontroller / se ting ut av esken, men hvis vi vil gjøre mye mer, må vi gjøre noen grunnleggende konfigurasjonsendringer. La oss begynne med å åpne opp drivstoff / app / config / config.php og sette inn noen ting:

/ ** * index_file - Navnet på hovedstartfilen. * * Sett dette til false eller fjern hvis du bruker mod_rewrite. * / 'index_file' => 'index.php',

Hvis du har mod_rewrite installert, kan vi endre denne verdien til å være en tom streng, som vil la oss fjerne index.php fra nettadressen vår. Det finnes en .htaccess-fil i offentligheten / som vil støtte dette.

Deretter må vi sette opp databasekonfigurasjonen, som for vår del av denne opplæringen antar vi er MySQL. Opprett din database med skrivebordet GUI, phpMyAdmin eller etc kommandolinje:

 mysql> lage database blog_example;

Åpne opp drivstoff / app / config / db.php og sett Fuel :: UTVIKLING array, slik som:

Brensel :: DEVELOPMENT => array ('type' => 'mysql', 'connection' => array ('vertsnavn' => 'localhost', 'database' => 'blog_example', 'brukernavn' => 'yourmyseluser' , 'passord' => 'dinmysqlpassword', 'vedvarende' => falsk,), 'table_prefix' => ", 'charset' => 'utf8', 'caching' => false, 'profiling' =>,

Deretter lar vi aktivere orm og auth pakke ved å ikke kommentere følgende linjer:

/ ** * Disse pakkene lastes på drivstoffets oppstart. Du kan angi dem på * på følgende måte: * * array ('auth'); // Dette antar at pakkene er i PKGPATH * * // Bruk dette formatet til å spesifisere banen til pakken eksplisitt * array (* array ('auth' => PKGPATH.'auth / ') *); * / 'packages' => array ('orm', 'auth',),

Dette trinnet er bare nødvendig hvis du ønsker å bruke dem - som i denne opplæringen vil vi være.

Valgfritt: Bruke en virtuell vert

Det siste trinnet med oppsettet er å opprette en virtuell vert. Det gjør du ikke trenge å gjøre dette, men det betyr at du kan bruke en ekte nettadresse og fjerne /offentlig/ fra nettadressen din. Hvis du bruker Apache, bør en enkel klump som dette gjøre trikset:

 DocumentRoot / home / phil / Nettsteder / blogg / offentlig servernavn local.blog  Alternativer All AllowOverride All  

Hvis dette var et live-nettsted, vil vi legge til Servernavn som "myawesomeblog.com" i stedet for "local.blog", men dette fungerer for vår demo. Når du har lagt til "127.0.0.1 local.blog" til din / etc / hosts fil du burde være klar til å gå. Hvis du vil hoppe over dette trinnet, må du justere nettadressen i denne artikkelen.


Trinn 4: Kick-start Development

Med denne grunnleggende forståelsen av hvordan Controllers, Views og Configuration fungerer, kan du sannsynligvis hoppe inn i dokumentasjonen og komme i gang ganske raskt, men for å virkelig gå, må den beste måten være Stillas.

Stillas er ikke et nytt konsept og er best kjent for sin plass i rammen Ruby on Rails. Det er egentlig en veldig enkel måte å lage kode basert på noen forutsetninger gjennom kommandolinjen. Du vil legge til, redigere og slette et foretak som du nevner og angi felt for. Det er gjort gjennom olje og underkommandoen "olje genererer stillas"

Så hvis vi ønsker å bygge en grunnleggende blogg, trenger vi bare å skrive "$ olje g stillas etter tittel: streng sammendrag: varchar [250] body: text". Olje vil være veldig verbose om hva det gjør og fortelle deg alle filene som er opprettet:

 Opprette modell: /home/phil/Sites/blog/fuel/app/classes/model/post.php Opprette migrasjon: /home/phil/Sites/blog/fuel/app/migrations/001_create_posts.php Opprette kontroller: / home / fil / Nettsteder / blogg / drivstoff / app / klasser / controller / posts.php Opprette visning: /home/phil/Sites/blogfuel/app/views/posts/index.php Opprette visning: / home / phil / Nettsteder / blogg / brensel / app / visninger / innlegg / view.php Opprette visning: /home/phil/Sites/blog/fuel/app/views/posts/create.php Opprette visning: / home / phil / Nettsteder / blogg / drivstoff / app / visninger / innlegg / edit.php Opprette visning: /home/phil/Sites/blog/fuel/app/views/posts/_form.php Opprette visning: / home / phil / Nettsteder / blogg / brensel / app / visninger / mal. php

Merk: Modeller som genereres av stillas, bruker ORM-pakken, så sørg for at den er aktivert som beskrevet ovenfor.

Du ser her en modell som heter "post", en migrasjon (mer om de senere) en kontroller"innlegg"og en rekke visninger. Feltene er alle generert basert på de oppgitte argumentene, som er feltnavn: fieldtype [valgfri lengde]. Til tittel, vi brukte ": streng" som, så lenge du bruker MySQL, vil alias : VARCHAR- [255], men en hvilken som helst DB-type støttes.

Med denne kommandoen kjører vi å kjøre våre migrasjoner. En migrering er en rekke endringer som må gjøres til en database. Dette blir nyttig når flere utviklere jobber med et prosjekt, da hver utvikler kan legge til en migrasjon, og du kan kjøre en enkelt kommando for å sikre at lokal kopi er oppdatert. Ingen flere "manglende felt" eller "tabell eksisterer ikke" feil etter å ha tatt den nyeste utviklings kopien!

For å kjøre denne overføringen, skriv bare:

$ oljeforbedre migrere Migrert til siste versjon: 1.

Nå kan du se hva Olje har gjort for deg ved å gå til http://local.blog/posts

Hvis du vil lage kontroller, modeller og migrasjoner separat og ikke alle sammen slik, kan du gjøre det lett med olje g kontrolleren, olje g migrere, olje g modell, etc.

templating

Du har kanskje lagt merke til, i oljen opprettet en fil i trinnet ovenfor:

 Opprette visning: /home/phil/Sites/blog/fuel/app/views/template.php

Dette vil bli opprettet når du først kjører en stillas-kommando, da alle visninger er pakket inn med en "mal" eller "layout" - som er en topptekst og bunntekst som innpakker innholdet ditt. For å bytte fra standarddesignet, er alt du trenger å gjøre, rediger denne malen, ta med ditt eget CSS, legg til en logo og skriv inn hvilke metadata du liker.

Når du oppretter nye kontroller manuelt, kan du utvide 'Controller_Template'i stedet for det vanlige'Controller'for å ha denne malen pakket rundt alle visninger lastet i kontrolleren.

Hvis du ønsker å bruke en annen mal for en kontroller, endrer du ganske enkelt $ mal eiendom til noe annet.

klassen brukere utvider Controller_Template public $ template = 'alternative'; 

Dette vil bruke drivstoff / app / visninger / alternative.php se fil i stedet for det vanlige drivstoff / app / visninger / template.php.

Arbeider med skjemaer

En av de viktigste aspektene av enhver søknad er skjemainnlevering. Slik blir data tatt fra en bruker; Det kan være et påloggingsbilde, en kommentar, en kurvkasse, etc. Dette er alt gjort med HTML normalt, men Fuel gir deg noen nyttige metoder for å gjøre denne prosessen enklere. De er valgfrie, så hvis du er en HTML-fanatiker, så fortsett, men for å få fart på det, les videre:

 

tittel: "));?>

oppsummering: "));?>

kropp: "), array ('cols' => 60, 'rows' => 8));?>>

Dette er en veldig enkel form som vil fungere med begge skape og redigere. For hvert innspill, hvis det kan finne en kamp i POST det vil bruke det; Ellers vil det se etter $ post variabel og skriv inn verdien (god for redigering).

Den virkelige fordelen med disse hjelperne kommer ikke fra renere syntaks som du kanskje tror, ​​men ved at det gir rammen for å programmere bryte skjemaet ditt. Dette betyr at brensel automatisk kan legge inn attributter til alle former for å sikre at data sendes i riktig tegnsett og aktivere CRSF (Cross-Site Request Forgery) automatisk.

Validerer skjemaene dine

Validering er en enkel måte å sikre at visse opplysninger har blitt levert i en formularinnlevering på riktig måte. Den kan samsvare med bestemte mønstre, datatyper eller -betingelser og vil bidra til å forbedre integriteten eller dataene.

Som standard brukes ikke validering av stillas, fordi det er komplisert å gjøre forutsetninger om hva utvikleren forventer å bli holdt i dataene. Av denne grunn er valideringen valgfri, men det er ganske enkelt å legge til i de genererte kontrollene eller jobbe med fra scratch.

La oss se på hvordan en "Create Post" -metode kan se etter bloggen vår:

 offentlig funksjon action_create ($ id = null) if (Input :: method () == 'POST') $ val = Validation :: factory (); // Legg til et felt for tittel, gi det etiketten "Tittel" og gjør det påkrevd $ val-> add ('title', 'Title') -> add_rule ('required'); // Legg til et annet felt for sammendrag, og kreve at det inneholder minst 10 og maksimalt 250 tegn $ val-> add ('summary', 'Summary') -> add_rule ('required') -> add_rule ('min_length ', 10) -> add_rule (' max_length ', 250); $ val-> legg til ('kropp', 'artikkel kropp') -> add_rule ('required'); hvis ($ val-> run ()) // Lag et innlegg basert på inngangen (array) $ post = Model_Post :: fabrikk ($ val-> validert ()); // Prøv og lagre det hvis ($ post-> save ()) Session :: set_flash ('notice', 'Lagt inn post #'. $ Post-> id. '.');  else Session :: set_flash ('notice', 'Kunne ikke lagre innlegg.');  Svar :: omadressering ('innlegg');  annet $ this-> template-> set ('error', $ val-> feil ());  $ this-> template-> title = "Posts"; $ this-> template-> content = Vis :: fabrikk ('innlegg / opprett'); 

Vi kan se her at vi forteller Validasjonsklassen - som er autoloaded som alle klasser) hvilke felt vi bryr oss om. Vi tilordner deretter regler og gir dem etiketter for mennesker å lese. Hvis $ Val-> Kjør () er ekte, vi lager en ny Model_Post Eksempel ved bruk av fabrikken, og send $ Val-> validert () som inneholder en rekke av alle innsendte data. Med det kan vi bare lagre forekomsten, som bruker ORM til å gjøre alt for deg.

Hvis noen av valideringsreglene returnerer falsk, deretter $ Val-> Kjør () vil mislykkes og vi får en rekke feil i $ Val-> feil () som vi kan sende tilbake til brukeren. Standaren template.php ser etter et "varsel" stykke flashdata (en del av øktklassen) eller bare vanlig visningsdata og kan sende ut en streng eller en matrise, så dette fungerer perfekt.

Ved å bruke kunnskapen din om validering og formbygging, kan du begynne å gjøre noen Controller-baserte applikasjoner du liker.

Arbeide med oppgaver

Oppgaver ligner kontroller, men kan ikke nås via en nettadresse eller rettet til på noen måte. I stedet kjøres de via "oljeforbedre"sub-kommando i terminalen. Dette er flott for å lage interaktive shell-skript som har tilgang til kodebase og gjør det mulig å skape sikre cron-jobber en bris.

Noen rammer tyder på at du bruker wget, curl eller noe som ligner på å kjøre en kontroller for å lage en cron-jobb, men dette kan føre til potensielle sikkerhets- eller konsistensproblemer med at cron-jobber går tom for å forårsake ondsinnede eller uventede resultater. På denne måten er den beskyttet mot omverdenen helt.

For et eksempel på en oppgave, ta en titt på den medfølgende "roboter"oppgave i drivstoff / app / oppgaver / robots.php:

klasse roboter offentlig statisk funksjon kjøre ($ tale = null) if (! isset ($ speech)) $ speech = 'KILL ALL HUMANS!';  $ eye = \ Cli :: color ("*", "rødt"); return \ Cli :: color ("\" $ tale \ "_____ / / _____ \\", "blue"). "\ n". \ Cli :: farge ("____ [\\" $ eye. \ Cli :: color ('---', 'blue'). $ eye. \ Cli :: farge ('/] ____', 'blue'). "\ n". \ Cli: : farge ("/ \\ # \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ / ___ / | | | | | \\ ___ \\ | | | | --- | | | | | | | _\ _ | | _ # _ | | _ / | __ | // \\\ \ <\\ _//^\\\\_ /> // \\\\ \\ || / | \\ //// \\\\\\\\\\\\\\\\\ \\ || / | | | | | --- | | --- | | --- | | --- | | | | | | ___ | | ___ | / \\ / \\ | _____ | | _____ | | HHHHH | | HHHHH | ", 'blue');

Å kjøre dette jestful Oppgave bare skriv inn "olje r roboter"eller"olje r roboter 'drepe alle mus' "for å få roboten til å si noe annet.


Sammendrag

Hvis du fulgte hvert trinn, har du installert Brensel, lært hvor viktige filer går, konfigurert en grunnleggende installasjon for å kjøre på Apache med mod_rewrite (andre servere fungerer også bra), og opprettet enkle kontroller og visninger ved hjelp av skjemaer og validering. Med stillas som er tilgjengelig for å generere kode for å plukke fra hverandre, bør det være nok kode å lære av!

På dette tidspunktet bør du ha nok kunnskap til å spille rundt og lage noen veldig enkle apper - det vil si til del to i denne serien, der vi skal gå gjennom prosessen med å skape og utvide Base Controllers for å skape separasjon for frontend / backend. Vi vil også se på avanserte ORM-, autentiseringsdrivere og filopplastinger. Følg med!