Komma igång med bränslepumpen för bränsle

Denna tvådelade handledning kommer att få dig igång med Fuel PHP-ramen. Vi börjar med grunderna och sedan gå vidare till några mer avancerade ämnen i del två! Låt oss börja.


Introduktion

Bränsle är en ny PHP Framework byggd speciellt för PHP 5.3, som använder den beprövade MVC-arkitekturen för logisk kodseparation och kombinerar de bästa idéerna i vissa befintliga ramar med förbättringar och idéer i sig. En slutlig v1.0 har nyligen släppts, men ramverket har redan ett stort följd efter nio månaders tung utveckling. Den här artikeln får dig att få fart på hur man gör webbplatser med bränsle - men först, låt oss prata lite om arkitekturen.

Förstå MVC

MVC-arkitekturen (Model-View-Controller) används av många befintliga ramar som CodeIgniter, Zend Framework, Symphony och Ruby on Rails. Om du är bekant med någon av dessa ramar har du en början!

För dem som är nya på den här arkitekturen är MVC ett sätt att skilja din kod beroende på vilken roll det spelar i din ansökan. I applikationsflödet börjar det med en kontroller som laddas av bränsle. En metod utförs sedan som utgör vilken data som ska hämtas med en modell. När det är klart kan kontrollören bestämma vilken visning (er) som ska laddas (om någon). Visningar innehåller produktionen dina besökare får se, AJAX-svar eller felmeddelanden.

En mer fördjupad förklaring av MVC från bränsleperspektivet finns i bränsle MVC-dokumentationen; så vi hoppar över de bra sakerna.

Vi börjar med några av de grundläggande grunderna för att få helt nya användare att gå. Om något av detta verkar självklart, snälla gå ner lite för att komma till några av de mer spännande funktionerna.


Steg 1: Installation

Installation är lika enkelt som att ta tag i en kopia från GitHub eller ladda ner en ZIP från webbplatsen. Du kan också använda en en-liner-installation om du använder ett * nix-system, som Linux, Mac OS X etc som kräver att Git körs. Installera Git är ganska enkelt och gör sakerna mycket enklare när du utvecklar dina applikationer:

$ curl get.fuelphp.com/oil | sh

Detta kommer att installera en mycket begränsad version av "olja", vilket är namnet på kommandoradsverktyget som du kan använda när du arbetar med bränsleapplikationer. Den här avkortade versionen kan användas för att skapa applikationer:

$ olja skapa blogg

Detta skapar en bloggmapp i din nuvarande katalog som innehåller basramen. Om du stöter på några problem, ta en titt på de mer detaljerade installationsanvisningarna.

Om vi ​​antar att du körde det här kommandot i din lokala servrar webbrot, borde vi kunna bläddra till http: // localhost / test / offentlig och se välkomstsidan.

Filstruktur

Roten till din ansökan bör innehålla tre huvudpunkter:

  • bränsle/ - Där alla dina PHP-kod kommer att leva.
  • offentlig/ - Allt du vill vara direkt tillgänglig i webbläsaren, så JS, CSS, bilder, etc..
  • olja - En körbar, vilken är en mer funktionell version av den tidigare installerade oljan som kan köra kommandoradsuppgifter som genereringskod eller interaktiv felsökning inom din applikation. Det är valfritt, så du kan radera det om du inte gillar kommandoraden.

Inom bränsle / vi har några viktiga mappar:

  • app/ - Alla applikationsspecifika PHP-kod går in, inklusive dina Modeller, Visningar och Controllers.
  • kärna/ - Det är här där Bränsle själv lever. Om du använder Git blir det en delmodul som enkelt kan uppdateras.
  • paket / - Bränsle skiljer ut viss logik i paket för att undvika uppblåsning av kärnan. Som standard innehåller bränsle tre paket: olja, auth och orm. Dessa paket kommer inte att laddas om du inte behöver dem, så vi filtrerar dem senare.

Den viktiga delen här är appen / mappen:

  • config / - Konfigurationsfiler för olika klasser och den allmänna filen "config.php" bor här.
  • klasser/ - Här kommer alla Controllers, Models, hjälperklasser, affärslogikbibliotek mm att gå. Om du behöver skriva en klass som ska användas i din kod kommer det förmodligen att gå in här. Namnen är små bokstäver.
  • klasser / styrenheten / - Det är här kontrollörer placeras.
  • klasser / modell / - Plats för dina modeller, även om de verkligen bara är bara en annan klass.
  • visningar / - Sätt dina visningsfiler här i mappar eller bara i roten. Det finns inga specifika namngivningskonventioner för synpunkter.

Innan vi går igenom någon mer teori, låt oss skriva en kod.


Steg 2: Hej världen

Låt oss ta bort bränsle / app / klasser / styrenheten / welcome.php controller och göra vår egen, kallad hello.php.

I den filen lägger du till följande kod:

klass Controller_Hello utökar Controller public function action_index () echo "Hello World!"; 

Nu om vi bläddra till http: //localhost/test/public/index.php/hello, du borde se "Hello World!" utgång till webbläsaren. De action_ prefix berättar för oss att det här är en routbar metod och inte någon återuppringning eller annan delad metod, och innebär att du kan använda metodenamn, som "lista" utan att PHP blir förvirrad.

Om vi ​​vill ha den här hejkontrollanten att vara vår "root" -kontroller istället för den nu borta welcome.php, vi behöver bara öppna bränsle / app / config / routes.php och ändra _root_-rutten såhär:

returnera array ('_root_' => 'hej', // Standardrutan);

Din första vy

Gör en fil bränsle / app / vyer / hello.php och lägg till:

 

Hej!

Hallå , hur är läget?

Ändra sedan din regulator lite:

klass Controller_Hello utökar Controller public function action_index () echo "Hello World!";  allmän funktion action_buddy ($ name = 'kompis') $ this-> response-> body = Visa :: fabriks ("hej", array ('name' => $ name,);

Nu, om du laddar http: //localhost/test/public/index.php/hello/buddy eller http: //localhost/test/public/index.php/hello/buddy/John , du kommer att se $ name variabel genomförs från metoden till vyn. Väsentligen extrahera() körs på utsikten.


Steg 3: Grundläggande konfiguration

Som du kan se kan bränsle göra grundläggande kontroller / visa saker ur lådan, men om vi vill göra mycket mer behöver vi göra några grundläggande konfigurationsändringar. Låt oss börja med att öppna upp bränsle / app / config / config.php och ställa in några saker:

/ ** * index_file - Namnet på huvudstartfilen. * * Ställ in detta till false eller ta bort om du använder mod_rewrite. * / 'index_file' => 'index.php',

Om du har mod_rewrite installerat, kan vi ändra det här värdet för att vara en tom sträng, vilket låter oss ta bort index.php från vår webbadress Det finns en .htaccess-fil i allmänhet / som kommer att stödja detta.

Därefter måste vi konfigurera databaskonfigurationen, vilket för vård av denna handledning vi antar är MySQL. Skapa din databas med skrivbordet GUI, phpMyAdmin eller etc kommandorads:

 mysql> skapa databasen blog_example;

Öppna bränsle / app / config / db.php och ställa in Bränsle :: UTVECKLING array, som så:

Bränsle :: DEVELOPMENT => array ('typ' => 'mysql', 'connection' => array ('värdnamn' => 'localhost', 'database' => 'blog_example', 'användarnamn' => 'yourmyseluser' , 'password' => 'yourmysqlpassword', 'persistent' => falskt,), 'table_prefix' => "," charset '=>' utf8 ',' caching '=> false,' profiling '=> false,

Därefter kan vi aktivera orm och auth paketet genom att inte kommentera följande rader:

/ ** * Dessa paket är laddade på bränsleens start. Du kan ange dem på * på följande sätt: * * array ('auth'); // Detta antar att paketen är i PKGPATH * * // Använd det här formatet för att ange sökvägen till paketet explicit * array (* array ('auth' => PKGPATH.'auth / ') *); * / 'packages' => array ('orm', 'auth'),

Detta steg krävs endast om du vill använda dem - vilket i den här handledningen vi kommer att vara.

Valfritt: Använda en virtuell värd

Det sista steget med installationen är att skapa en virtuell värd. Du gör inte behöver för att göra detta, men det betyder att du kan använda en riktig webbadress och ta bort /offentlig/ från din webbadress Om du använder Apache, ska en enkel chunk så här göra tricket:

 DocumentRoot / home / phil / Sites / blogg / public ServerName local.blog  Alternativ All AllowOverride All  

Om det här var en levande webbplats skulle vi lägga till Servernamnet som "myawesomeblog.com" istället för "local.blog" men det här fungerar för vår demo. När du har lagt till "127.0.0.1 local.blog" till din / etc / hosts filen ska du vara redo att gå. Om du vill hoppa över det här steget justera sedan URL-adressen i den här artikeln.


Steg 4: Kick-start Development

Med denna grundläggande förståelse för hur Controllers, Views and Configuration fungerar kan du förmodligen hoppa in i dokumentationen och komma igång ganska snabbt, men för att verkligen gå, måste det bästa sättet vara Ställningar.

Byggnadsställningar är inte ett nytt koncept och är mest kända för sin plats i ramverket Ruby on Rails. Det är i grunden ett väldigt enkelt sätt att skapa kod baserad på några antaganden via kommandoraden. Du vill lägga till, redigera och ta bort en enhet som du heter och ange fält för. Det görs genom olja och underkommandot "olja genererar byggnadsställningar"

Så om vi vill bygga en grundläggande blogg behöver vi bara skriva "$ olja g ställning efter titel: sträng sammanfattning: varchar [250] kropp: text". Olja kommer att vara väldigt verbosat om vad det gör och berätta alla filer som skapats:

 Skapa modell: /home/phil/Sites/blog/fuel/app/classes/model/post.php Skapa migration: /home/phil/Sites/blog/fuel/app/migrations/001_create_posts.php Skapa kontroller: / home / phil / Sites / blog / fuel / app / classes / controller / posts.php Skapa visning: /home/phil/Sites/blogfuel/app/views/posts/index.php Skapa visning: / home / phil / Sites / blog / bränsle / app / visningar / inlägg / view.php Skapa bild: /home/phil/Sites/blog/fuel/app/views/posts/create.php Skapa visning: / home / phil / Sites / blog / fuel / app / visningar / inlägg / edit.php Skapa visning: /home/phil/Sites/blog/fuel/app/views/posts/_form.php Skapa visning: / home / phil / Sites / blog / fuel / app / views / template. php

Obs! Modeller som genereras av byggnadsställningar använder ORM-paketet så se till att det är aktiverat som beskrivet ovan.

Här får du se en modell som heter "posta", en migrering (mer om dem senare) en controller"inlägg"och en massa synpunkter. Fälten genereras alla baserat på de angivna argumenten, vilka är fältnamn: fieldtype [valfri längd]. För titel, vi använde ": sträng" som, så länge du använder MySQL, kommer att alias : Varchar [255], men någon DB-typ stöds.

Med denna kommandotid måste vi köra våra migreringar. En migration är en serie förändringar som måste göras till en databas. Detta blir användbart när flera utvecklare arbetar på ett projekt, eftersom varje utvecklare kan lägga till en migrering och du kan köra ett enda kommando för att se till att din lokala kopia är aktuell. Inget mer "saknas fält" eller "tabell finns inte" fel efter att ha tagit den senaste utvecklingsexemplet!

För att köra den här migreringen, skriv bara:

$ olja förfina migrera Migrerad till senaste versionen: 1.

Nu kan du se vad Olja har gjort för dig genom att gå till http://local.blog/posts

Om du vill skapa kontroller, modeller och migreringar separat och inte alla tillsammans så här kan du göra det lätt med olja g-regulator, olja g migrera, olje g modell, etc.

mall

Du kanske har märkt, i steget ovan, att oljan skapade en fil:

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

Detta skapas när du först kör ett byggnadskommando eftersom alla visningar är inslagna med en "mall" eller "layout" - vilket är en rubrik och sidfot som omsluter ditt innehåll. För att ändra från standarddesignen är allt du behöver göra att redigera den här mallen, inkludera din egen CSS, lägg till en logotyp och ange vilken metadata du gillar.

När du skapar nya kontroller manuellt kan du förlänga "Controller_Template"istället för det vanliga"Kontrollant"för att ha denna mall omslagen runt visningar som laddats i kontrollenheten.

Om du vill använda en annan mall för en kontroller ändrar du helt enkelt $ mall egendom till något annat.

klassen Användare utökar Controller_Template public $ template = 'alternative'; 

Detta kommer att använda bränsle / app / vyer / alternative.php visa fil istället för det vanliga bränsle / app / vyer / template.php.

Arbeta med formulär

En av de viktigaste aspekterna av någon ansökan är formulärinsändning. Så här tas data från en användare; Det kan vara en inloggning, en kommentar, en kassaskrivning, etc. Det här är allt gjort med HTML normalt, men Bränsle ger dig några användbara metoder för att göra denna process mycket enklare. De är frivilliga, så om du är en HTML-fanatiker fortsätter du, men för att påskynda saker, läs vidare:

 

titel: "));?>

sammanfattning: "));?>

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

Det här är en mycket enkel form som kommer att fungera med båda skapa och redigera. För varje ingång, om den kan hitta en matchning i POSTA det kommer att använda det; annars kommer det att leta efter $ post variabel och mata in värdet (bra för redigering).

Den verkliga fördelen med dessa hjälpare kommer inte från renare syntax som du kanske tror, ​​men därigenom tillåter du ramen att programmera in din formulär. Det betyder att bränsle kan bädda in attribut automatiskt till alla former för att se till att data skickas i rätt teckenuppsättning och aktivera CRSF (Cross-Site Request Forgery) automatiskt.

Validerar dina formulär

Validering är ett enkelt sätt att säkerställa att viss information har lämnats i en formulärinsändning på rätt sätt. Det kan matcha vissa mönster, datatyper eller villkor och hjälper till att förbättra integriteten eller data.

Som standard används valideringen inte av stillbild, eftersom det är komplicerat att göra antaganden om vad utvecklaren förväntar sig att hållas i data. Av denna anledning är valideringen valfri men det är ganska lätt att lägga till i dina genererade kontroller eller arbeta med från början.

Låt oss se hur en "Skapa post" -metod kan leta efter vår blogg:

 allmän funktion action_create ($ id = null) if (Input :: method () == 'POST') $ val = Validation :: factory (); // Lägg till ett fält för titel, ge det etiketten "Titel" och gör det obligatoriskt $ val-> add ('title', 'Title') -> add_rule ('required'); // Lägg till ett annat fält för sammanfattning och kräva att det innehåller minst 10 och högst 250 tecken $ val-> lägg till ('sammanfattning', 'Sammanfattning') -> add_rule ('required') -> add_rule ('min_length ', 10) -> add_rule (' maxlängd ', 250); $ val-> add ('body', 'Artikel body') -> add_rule ('required'); om ($ val-> run ()) // Gör ett inlägg baserat på ingången (array) $ post = Model_Post :: factory ($ val-> validated ()); // Pröva och spara det om ($ post-> save ()) Session :: set_flash ("notice", "Added post #". $ Post-> id. '.');  else Session :: set_flash ('notice', 'Kunde inte spara inlägg.');  Svar :: omdirigera ('inlägg');  annat $ this-> template-> set ('error', $ val-> fel ());  $ this-> template-> title = "Inlägg"; $ this-> template-> content = Visa :: fabriks ('inlägg / skapa'); 

Vi kan se här att vi berättar Validation klassen - som är autoloaded som alla klasser) vilka områden vi bryr oss om. Vi tilldelar sedan regler och ger dem etiketter för människor att läsa. Om $ Val-> run () är Sann, vi gör en ny Model_Post Exempel på att använda fabriken och skicka $ Val-> validerad () som innehåller en uppsättning av alla inlämnade data. Med det kan vi helt enkelt spara förekomsten, som använder ORM för att göra allt för dig.

Om någon av valideringsreglerna återkommer falsk, sedan $ Val-> run () kommer att misslyckas och vi får en rad fel i $ Val- ^> fel () som vi kan skicka tillbaka till användaren. Standarden template.php letar efter en "uppsägning" bit av flashdata (del av sessionsklassen) eller bara normal visningsdata och kan mata ut en sträng eller en array, så det fungerar perfekt.

Med din kunskap om validering och formbyggnad kan du börja göra alla Controller-baserade applikationer du vill ha.

Arbeta med uppgifter

Uppgifter liknar kontroller men kan inte nås via en webbadress eller dirigeras till på något sätt. I stället kör de via "olja förfina"underkommando i terminalen. Det här är perfekt för att skapa interaktiva skalskript som har åtkomst till din kodbas och gör att skapa säkra cron-jobb en bris.

Vissa ramar tyder på att du använder wget, ringla eller något som liknar att köra en kontroller för att göra ett cron-jobb, men det kan leda till potentiella säkerhets- eller konsistensproblem med att cron-jobb är slutförd för att orsaka skadliga eller oväntade resultat. På så sätt är det helt skyddat från omvärlden.

För ett exempel på en uppgift, ta en titt på den "robotar"uppgift i bränsle / app / uppgifter / robots.php:

klassrobotar public static function run ($ speech = null) if (! isset ($ speech)) $ speech = 'KILL ALL HUMANS!';  $ eye = \ Cli :: color ("*", "red"); returnera \ Cli :: color ("\" $ speech \ "_____ / / _____ \\", "blue"). "\ n". \ Cli :: färg ("____ [\\" $ eye. \ Cli :: color ('---', 'blue'). $ eye. \ Cli :: färg ('/] ____', 'blue'). "\ n". \ Cli: : färg ("/ \\ # \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" / ___ / | | | | | \\ ___ \\ | | | | --- | | | | | | | _\ _ | | _ # _ | | _ / | __ | // \\\ \ <\\ _//^\\\\_ /> // \\\\ \\ || / | \\ //// \\\\\\\\ | \\ || / | | | | | --- | | --- | | --- | | --- | | | | | | ___ | | ___ | / \\ / \\ | _____ | | _____ | | HHHHH | | HHHHH | "," blue ");

För att köra detta jestful uppgiften skriver bara "olja r robotar"eller"olja r robotar "döda alla möss" "för att få roboten att säga något annat.


Sammanfattning

Om du följde varje steg har du installerat Bränsle, lärt dig var de viktigaste filerna går, konfigurerade en grundläggande installation för att köras på Apache med mod_rewrite (andra servrar fungerar också bra), och skapade enkla kontroller och visningar med hjälp av formulär och validering. Med byggnadsställningar som är tillgängliga för att generera kod för att plocka isär, borde det finnas gott om kod att lära av!

Vid den här tiden borde du ha tillräckligt med kunskap för att spela runt och skapa några riktigt enkla appar, det vill säga tills del två i serien, där vi ska gå igenom processen för att skapa och utöka baskontroller för att skapa din frontend / backend-separation. Vi granskar även avancerade ORM-, autentiseringsdrivrutiner och filuppladdningar. Håll dig igång!