Kohana är ett PHP 5-ramverk som använder arkitektoniska mönstret Model View Controller (MVC). Det finns flera anledningar till varför du borde välja Kohana, men de viktigaste är säkerhet, viktlöshet och enkelhet. I denna handledning presenterar jag dess huvudfunktioner, och med en enkel demonstration visar jag hur mycket tid Kohana kan spara dig.
Kohana är en PHP5-ram som använder arkitekturmönstret Model View Controller. MVC håller applikationslogiken
separera från presentationen. Detta gör det möjligt för oss att skapa renare kod och spara tid för bugsökning.
I okänt med detta mönster:
Kohana var ursprungligen en gaffel av CodeIgniter (CI), som är en öppen källprodukt från EllisLab. Det finns många likheter mellan CI och Kohana, men hela koden är antingen ny eller helt omskriven. Som du kan läsa på den officiella Kohana webbplatsen är huvuddragen:
Låt oss börja. Besök Kohanas officiella webbplats http://kohanaphp.com och klicka på den gröna rutan i det högra hörnet för att hämta den senaste versionen. Alla Kohana-bibliotek, hjälpare och synpunkter ingår i standardladdningspaketet, men du kan välja extra moduler, säljverktyg och språk om du vill. För denna handledning kan standardpaketet vara tillräckligt. Klicka på "Ladda ner Kohana!" för att börja ladda ner.
När du är klar med att ladda ner den:
$ config ['site_domain'] = 'localhost / kohana';
Kohana kommer att springa i nästan vilken miljö som helst med minimal konfiguration. Det finns några minsta serverns krav:
Det finns också några nödvändiga tillägg.
Om din installation slutförs framgångsrikt kommer du att dirigeras till den här testsidan:
Om någon av testen misslyckas måste du rätta till dem innan du går framåt.
Om alla tester har passerat, gå till Kohana-katalogen och ta bort eller byt namn på scriptet install.php. Uppdatera, och du kommer att se en välkomstsida så här:
Kohana är redo att gå. Ingen annan konfiguration behövs. Denna ram är fantastisk. Är det inte Låt oss granska någon kod. Följ mig.
Kanoniska programmeringstutorials börjar med "Hello World" -exemplet. Jag tror istället att en enkel applikation kan ge dig en klar uppfattning om hur ramverket fungerar. Så vi ska bygga en CD-samlingschef - bara för en rolig demonstration. Innan vi börjar kodning krävs en kort introduktion till Kohana filsystem.
Vår ansökan kommer att placeras i Ansökan mapp. I den här mappen finns det flera undermappar men vi behöver följande för vårt projekt:
Återstående undermappar krävs inte för denna handledning, så jag uppmanar dig att lära dig mer på Kohana webbplats.
De systemet mapp värd Kohana-kärnan och Kohana-verktygen som bibliotek, hjälpare och fördefinierade konfigurationsfiler. I det här projektet kommer vi att använda några bibliotek och några hjälpare - bra verktyg för att påskynda ditt arbete.
De tillgångar mappen är inte en fördefinierad Kohana-mapp. Jag har skapat den för mediefiler som CSS, JS och bilder. Jag ska visa dig hur du ska inkludera dessa filer i projektet.
De moduler mapp är platsen för att sätta återanvändbara samlingar av relaterade filer som tillsammans lägger till en viss funktionalitet för en applikation. Autentiseringsmodulen, som tillhandahålls av Kohana-laget, är ett exempel på modulen.
Det här är en mycket kort introduktion till Kohana-filsystemet, men det räcker för syftet med denna handledning. Jag vill inte borra dig mer med teorin.
Jag har valt MySQL som min DBMS, men kom ihåg att Kohana också stöder MsSQL, MySQLi, PostgreSQL, PDOSqlite. Skapa en databas med namnet "cd_collection" eller välj det namn du föredrar och kör följande SQL genom phpMyAdmin eller något verktyg som hanterar administrationen av MySQL.
CREATE TABLE 'albums' ('id' int (11) INTE NULL auto_increment, 'namn' varchar (50) samlar utf8_bin INTE NULL, "författare" varchar (50) samlar utf8_bin INTE NULL, 'genre_id' int (11) INTE NULL , Primär nyckel ('id'), nyckeln 'genre_id' ('genre_id')) MOTOR = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin AUTO_INCREMENT = 19; INSERT INTO "Album" ("id", "namn", "författare", "genre_id") VÄRDEN (2, "Linjer, Viner Och Försökstider", "Jonas Brothers", 16), (3, "ENDEN" , "The Black Eyed Peas", 16), (4, "Återfall", "Eminem", 18), (5, "Monument och Melodier", "Incubus", 1), (6, "Thriller", "Michael Jackson ', 16), (7,' Back in Black ',' AC / DC ', 4), (8, "The Dark Side of the Moon", "Pink Floyd", 4) av helvetet "," köttbullet ", 4), (10," Backstreet Boys "," Millennium ", 16), (11," Rykten "," Fleetwood Mac ", 4), (12," Come On Over " , "Shania Twain", 16), (13, Led Zeppelin IV, Led Zeppelin, 4), (14, "Jagged Little Pill", "Alanis Morissette", 4), (15, Sgt. Pepper "The Lonely Hearts Club Band", "The Beatles", 16), (16, "Falling In You", "C Line Line", 16), (17, "Music Box", "Mariah Carey", 16 ), (18, "Född i USA", "Bruce Springsteen", 4); CREATE TABLE "genrer" ("id" int (11) INTE NULL auto_increment, "namn" varchar (50) sortera utf8_bin INTE NULL, PRIMÄR KEY ('id'), UNIQUE KEY 'namn' ('namn')) MOTOR = I nnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_bin AUTO_INCREMENT = 22; INSERT INTO 'genres' ('id', 'name') värden (1, alternativ rock), (2, "blues"), (3 "klassisk"), , 'Country'), (6, 'Dance'), (7, 'Folk'), (8, 'Metal'), (9, 'Hawaiian'), (10, 'Import'), Indie Music "), (12, 'Jazz'), (13 'Latin'), (14, 'New Age'), (15, 'Opera'), (16, 'Pop'), Soul "), (18," Rap "), (20," Soundtracks "), (21," World Music "); ALTER TABLE "album" ADD CONSTRAINT "genre_inter_relational_constraint" UDLEDANDE NYCKEL ('genre_id') REFERENSER 'genrer' ('id') OM DELETE CASCADE ON UPDATE CASCADE;
Som du kan se skapar SQL två tabeller, album och genrer och fyller dem med viss data. Det sista SQL-steget lägger till en begränsning för den främmande nyckeln "genre_id".
Databasstrukturen är väldigt enkel och behöver inte mycket förklaring.
Nu måste du berätta för Kohana var din databas finns och hur du får tillgång till den. Redigera den globala konfigurationsfilen system / config / database.php som följer
$ config ['default'] = array ('benchmark' => TRUE, 'persistent' => FALSE, 'anslutning' => array ('typ' => 'mysql', 'user' => 'root' pass '=>' root ',' host '=>' localhost ',' port '=> FALSE,' socket '=> FALSE,' database '=>' cd_collection '),' character_set '=>' utf8 ' 'table_prefix' => ", 'object' => TRUE, 'cache' => FALSE, 'escape' => TRUE);
Denna kod berättar Kohana att ansluta till en MySQL-databas som heter "cd_collection" på localhost med användarnamnet "root" och lösenordet "root". Du måste ändra dessa inställningar enligt din databasserver konfiguration.
Låt oss nu skapa vår första kontroller. Kom ihåg dessa konventioner.
Också, kom ihåg hur Kohana strukturerar sina webbadresser och hur du kan ringa en kontroller metod. till exempel http: //hostname/kohana_directory/index.php/controller/function.
Låt oss ta en titt på denna enkla kontroller.
PHP5 OOP är en förutsättning. Så om du inte är välkänd kan du lära dig mer här.
Konstruktörsfunktionen, kallad __construct, initierar klassen och kallar förälderkonstruktören.
Index-funktionen är standardfunktionen, så det kommer att ringas om vi kallar regulatorn utan
specificerar någon funktion (t ex http: //localhost/index.php/kohana/album. Efter namnkontrollanten
det finns ingen funktion, default index-funktionen kommer att kallas.)Med tanke på dessa grundläggande regler, låt oss fokusera på vår ansökan. Albumkontrollanten implementerar alla åtgärder för
albumhantering. Denna kontroller tillåter oss att skapa ett nytt album, för att visa albumen som finns lagrade i vår databas,
att uppdatera ett album och att radera ett album.Så, låt oss ändra klassen enligt följande.
Skapa en fil som heter album.php i application / controllers / och klistra in följande.
album_model = nytt Album_Model; $ this-> genre_model = ny Genre_Model; $ this-> list_view = new View ('list'); $ this-> update_view = new View ('update'); $ this-> create_view = new View ('create'); offentliga funktionsindex () $ this-> show_albums_list (); privat funktion show_albums_list () $ albums_list = $ this-> album_model-> get_list (); $ This-> list_view-> set (albums_list ', $ albums_list); $ This-> list_view-> render (TRUE); allmän funktion show_create_editor () $ this-> create_view-> set ('genres_list', $ this-> get_genres_list ()); $ This-> create_view-> render (TRUE); offentlig funktion show_update_editor ($ id) $ album_data = $ this-> album_model-> läs ($ id); $ This-> update_view-> in ( 'album_id', $ album_data [0] -> id); $ This-> update_view-> set ( 'name', $ album_data [0] -> namn); $ This-> update_view-> in ( 'upphovsman', $ album_data [0] -> författare); $ This-> update_view-> in ( 'genre_id', $ album_data [0] -> genre_id); $ This-> update_view-> set (genres_list ", $ this-> get_genres_list ()); $ This-> update_view-> render (TRUE); allmän funktion skapa () $ album_data = array ('name' => $ this-> input-> post ('namn'), 'author' => $ this-> input-> post ("author") 'genre_id' => $ this-> input-> post ('genre_id')); $ This-> album_model-> skapa (album_data $); url :: omdirigera ( 'album'); public function update () $ album_data = array ('name' => $ this-> input-> post ('namn'), 'författare' => $ this-> input-> post 'genre_id' => $ this-> input-> post ('genre_id')); $ This-> album_model-> Uppdatera ($ this-> input> post (album_id), $ album_data); url :: omdirigera ( 'album'); public function delete ($ id) $ this-> album_model-> delete ($ id); url :: omdirigera ( 'album'); privat funktion get_genres_list () $ db_genres_list = $ this-> genre_model-> get_list (); $ genres_list = array (); om (sizeof ($ db_genres_list)> = 1) foreach ($ db_genres_list som $ item) $ genres_list [$ item-> id] = $ item-> namn; returnera $ genres_list;Låt mig förklara vad den här koden gör.
Fem medlemmar variabler deklareras högst upp i klassen:
privat $ album_model; privat $ genre_model; privat $ list_view; privat $ create_view; privat $ update_view;Dessa medlemmar är privata eftersom jag bara vill begränsa synligheten till den här klassen.
I konstruktionsmetoden skapas modell och visningsobjekt med de fem medlemmarna:
$ this-> album_model = nytt Album_Model; $ this-> genre_model = ny Genre_Model; $ this-> list_view = new View ('list'); $ this-> update_view = new View ('update'); $ this-> create_view = new View ('create');För att skapa ett modellobjekt använder du denna syntax:
$ obj_name = nytt Name_Model;Om du vill skapa ett visningsobjekt använder du denna syntax:
$ obj_name = new View ('view_filename_without_extension');Nu finns det två objekt att komma åt albumet och genremodellen och tre objekt för att få tillgång till de visningar som behövs för att göra presentationen.
Indexmetoden kallar metoden show_albums_list som listar alla album som lagras i databasen.
$ albums_list = $ this-> album_model-> get_list (); $ This-> list_view-> set (albums_list ', $ albums_list); $ This-> list_view-> render (TRUE);I den här metoden kan du se hur modell och visningsobjekt används för att få tillgång till relativa metoder. "get_list" är en modellmetod (vi ses senare) som returnerar alla album som lagras i databasen. Resultatet sparas i arrayen "$ album_list". För att överföra resultatmatrisen från regulatorn till vyn, kallas "set" -metoden på visningsobjektet. Denna metod kräver två parametrar: en ny tom variabel (album_list) som innehåller data för en befintlig variabel ($ album_list). Nu innehåller den nya variabeln "album_list" $ album_list-arrayen (vi kommer senare se hur du visar innehållet i vyn). Metoden "render", med den TRUE parametern, är nödvändig för att mata ut data till webbläsaren.
Metoden show_create_editor visar användargränssnittet för att infoga ett nytt album.
$ This-> create_view-> set (genres_list ", $ this-> get_genres_list ()); $ This-> create_view-> render (TRUE);Listan över genren överförs till vyn.
Metoden show_update_editor visar användargränssnittet för att uppdatera ett existerande album.
$ album_data = $ this-> album_model-> läs ($ id); $ This-> update_view-> in ( 'album_id', $ album_data [0] -> id); $ This-> update_view-> set ( 'name', $ album_data [0] -> namn); $ This-> update_view-> in ( 'upphovsman', $ album_data [0] -> författare); $ This-> update_view-> in ( 'genre_id', $ album_data [0] -> genre_id); $ This-> update_view-> set (genres_list ", $ this-> get_genres_list ()); $ This-> update_view-> render (TRUE);"läs" är en modell metod (vi kommer se det senare) som returnerar data ($ album_data) av albumet med ett ID lika med $ id. Sedan skickas varje enskilt element i det returnerade datalbumet till vyn.
Skapningsmetoden tar emot data, för ett nytt album, från vyn och data lagras i databasen.
$ album_data = array ('name' => $ this-> input-> post ('namn'), 'författare' => $ this-> input-> post ('author'), 'genre_id' => $ this -> input-> post ('genre_id')); $ This-> album_model-> skapa (album_data $); url :: omdirigera ( 'album');$ album_data är en array som innehåller POST-data från vyn. För att spara albumet skickas matrisen till skapningsmodellen. Den sista raden är ett samtal till en hjälparmetod. Hjälpare är helt enkelt funktioner som hjälper dig med utveckling. Hjälperklassen laddas automatiskt av ramverket. Hjälpare förklaras som statiska metoder i en klass, så det finns inget behov av att instansera klassen. I detta fall heter metoden "omdirigering" av hjälpen "url" och berättar Kohana att omdirigera webbläsaren till albumkontrollanten. Detta undviker en ny infogning (till exempel tryckning på F5).
"Hjälpare är helt enkelt funktioner som hjälper dig att utveckla."
Uppdaterings- och raderingsmetoderna fungerar på samma sätt som skapningsmetoden ovan.
Den sista metoden get_genres_list får genrer listan från modellen ($ db_genres_list) och bygger en ny array ($ genres_list) för valrutan i vyerna.
$ db_genres_list = $ this-> genre_model-> get_list (); $ genres_list = array (); om (sizeof ($ db_genres_list)> = 1) foreach ($ db_genres_list som $ item) $ genres_list [$ item-> id] = $ item-> namn; returnera $ genres_list;Steg 8: Skapa projektmodell
Låt oss nu skapa modeller för vår webbapplikation. Kom ihåg dessa konventioner.
Här är albummodellkoden. Skapa en fil som heter album.php i application / modeller / och klistra in koden nedan på den.
album_table = 'albums'; $ this-> genre_table = 'genrer'; public function read ($ id) $ this-> db-> where ('id', $ id); $ query = $ this-> db-> get ($ this-> album_table); returnera $ query-> result_array (); public function delete ($ id) $ this-> db-> radera ($ this-> album_table, array ('id' => $ id)); public function update ($ id, $ data) $ this-> db-> uppdatering ($ this-> album_table, $ data, array ('id' => $ id)); allmän funktion skapa ($ data) $ this-> db-> insert ($ this-> album_table, $ data); allmän funktion get_list () $ this-> db-> select ('albums.id som id, albums.name som namn, albums.author som författare, genres.name som genre'); $ This-> DB> från (> album_table $ this-); $ This-> DB> join ($ this-> genre_table, 'genres.id', 'albums.genre_id'); $ query = $ this-> db-> get (); returnera $ query-> result_array ();
Alla metoder i modellerna använder sig av Query Builder-syntaxen. Detta Kohana-verktyg ökar databasutvecklingstiden och förenklar skapandet av frågor.
Två medlemmar variabler deklareras högst upp i klassen:
privat $ album_table; privat $ genre_table;
Dessa medlemmar är privata eftersom jag vill begränsa synligheten endast till den här klassen. De är behållarna för databas tabeller namn.
Den första raden i konstruktormetoden laddar Kohana databasbiblioteket till $ this-> db. I andra och tredje linjen initialiseras de två klassmedlemmarna.
förälder :: __ konstruktion (); $ this-> album_table = 'albums'; $ this-> genre_table = 'genrer';
Frågan i läsmetoden hämtar albumrekord som har en viss identifierare ("$ id").
$ this-> db-> where ('id', $ id); $ query = $ this-> db-> get ($ this-> album_table); returnera $ query-> result_array ();
Frågan i raderingsmetoden raderar tabellraden för album som har en viss identifierare ("$ id").
$ this-> db-> delete ($ this-> album_table, array ('id' => $ id));
Frågan i uppdateringsmetoden uppdaterar albumets tabellraden som har en viss identifierare ("$ id") med nya värden från "$ data" arrayen.
$ this-> db-> update ($ this-> album_table, $ data, array ('id' => $ id));
Uppgiften "$ data" måste innehålla registreringsnamn som nycklar i arrayen och värdera som värden för arrayen. Arrayen "$ data" måste ha denna form:
$ data = array ('name' => 'album_name', 'author' => 'author_name', 'genre_id' => 'genre_id');
Frågan i skapningsmetoden infogar en ny post med värden för "$ data" -raden.
$ this-> db-> insert ($ this-> album_table, $ data);
Arrayen "$ data" måste ha denna form:
$ data = array ('id' => 'album_id', 'name' => 'album_name', 'author' => 'author_name', 'genre_id' => 'genre_id');
Frågan i get_list-metoden hämtar alla albumraderna.
$ this-> db-> select ('albums.id som id, albums.name som namn, albums.author som författare, genres.name som genre'); $ This-> DB> från (> album_table $ this-); $ This-> DB> join ($ this-> genre_table, 'genres.id', 'albums.genre_id'); $ query = $ this-> db-> get (); returnera $ query-> result_array ();
Nu genremodellen. Skapa en fil som heter genre.php i application / modeller / och klistra in koden nedan:
genre_table = 'genrer'; funktion get_list () $ query = $ this-> db-> get ($ this-> genre_table); returnera $ query-> result_array ();
Denna modell är väldigt enkel så jag slösar inte längre med att kommentera det. Modellerna och regulatorn är redo att gå. Låt oss nu arbeta på vyerna.
Visningar är filer som innehåller presentationsskiktet för din ansökan. Syftet är att hålla denna information skild från din applikationslogik för enkel återanvändning och renare kod. För detta projekt krävs tre visningar: en vy för att lista albumsamlingen, en vy för att skapa ett nytt album och en vy för att redigera ett existerande album.
Skapa en fil som heter list.php i application / vyer / och klistra in följande kod i:
CD COLLECTION
CD-samling | ||||
Albumnamn | Författare | Genre | "$ Item-> namn." | "echo""$ Item-> författare". | "echo""$ Item-> genre." | "echo"" .Html :: ankare (album / delete /'.$ Item-> id, html :: bild (tillgångar / images / delete.png '))." | "echo"" .Html :: ankare (album / show_update_editor /'.$ Item-> id, html :: bild (tillgångar / images / edit.png '))." | "echo"";?>
Denna vy visar en html-sida som innehåller en lista över alla album. Den här listan har skapats med hjälp av föreach loop som skriver ut informationen i en HTML-tabell. För varje albumrad finns det två bilder: ett "rött kors" och en "pocketbook". De kopplar respektive kontrollenhetens borttagningsmetod och uppdateringsmetoden. Båda passerar albumet ID till albumkontrollanten med en få förfrågan. Ovanför listan finns en knapp för att skapa nya album. I den här koden använder vi också en html-hjälpen som tillhandahålls av Kohana, vilket påskyndar operationer för att skriva html-sidor.
Låt oss nu skapa en fil som heter create.php i application / vyer /.
CD COLLECTION
Skapa nytt album | ".form :: label ('name', 'Name:')." | "echo"" .Form :: ingång ( 'namn', ")." | "echo""echo"
".form :: label (" author "," Author: ")." | "echo"" .Form :: ingång (författarens ")." | "echo"
".form :: label ('genre', 'Genre:')." | "echo"".Form :: dropdown (genre_id", $ genres_list)." | "echo"
".form :: submit ('submit', 'Skapa album')." | "echo"
Sist men inte minst är uppdateringsvyn. Låt oss skapa en fil som heter update.php i application / vyer /.
CD COLLECTION
Uppdatera album | ".form :: label ('name', 'Name:')." | "echo"".form :: input (" namn ", $ namn)." | "echo""echo"
".form :: label (" author "," Author: ")." | "echo"".form :: input (" author ", $ author)." | "echo"
".form :: label ('genre', 'Genre:')." | "echo"".form :: dropdown (" genre_id ", $ genres_list, $ genre_id)." | "echo"
".form :: submit ('submit', 'Uppdatera album')." | "echo"
Den första är en enkel redigerare som gör att användaren kan infoga information om ett nytt album.
Fälten som författare och namn kommer att införas med hjälp av en html-ingång och genre med hjälp av a
combo box. När användaren klickar på skapningsknappen skickas all information,
som en POST-förfrågan, till skapa / uppdateringsmetoden i albumkontrollanten. När regulatorn får dessa publicerade
variabler, det kallar modellen som infogar ett nytt album i databasen. Blanketterna, i båda vyerna, använder sig av Kohana formhjälpmedel.
För att ge lite stil till vår ansökan, skapa tillgångar mapp i Kohana-rotan på samma nivå i applikationsmappen. Nu öppnar du den och skapar två nya mappar: css och bilder.
I css mapp skapa en ny fil som heter style.css och klistra in det här:
en font-familj: Verdana, Genève, Arial, Helvetica, sans-serif; typsnitt: normal; fontstorlek: 12px; färg: # 00F; vertikal-align: text-top; img border: 0; etikett font-family: Verdana, Genève, Arial, Helvetica, sans-serif; typsnitt: normal; fontstorlek: 12px; inmatning border: 1px solid # 000; välj bredd: 185px; table.editor text-align: center; font-family: Verdana, Genève, Arial, Helvetica, sans-serif; typsnitt: normal; typsnittstorlek: 11px; färg: #fff; bredd: 280px; bakgrundsfärg: # 666; gränsen: 0px; gränskollaps: kollapsa; gränsbild: 0px; table.editor td.editor_title bakgrundsfärg: # 666; färg: #fff; vaddering: 4px; text-align: left; font-weight: bold; typsnittstorlek: 16px; table.editor td vaddering: 4px; table.list text-align: center; font-family: Verdana, Genève, Arial, Helvetica, sans-serif; typsnitt: normal; typsnittstorlek: 11px; färg: #fff; bredd: 280px; bakgrundsfärg: # 666; gränsen: 0px; gränskollaps: kollapsa; gränsbild: 0px; table.list td.item bakgrundsfärg: #CCC; färg: # 000; vaddering: 4px; text-align: left; gränsen: 1px #fff solid; table.list td.list_title, table.list td.headers bakgrundsfärg: # 666; färg: #fff; vaddering: 4px; text-align: left; border-bottom: 2px #fff solid; font-weight: bold; table.list td.list_title font-size: 16px; table.list td.headers font-size: 12px;
Kopiera nu följande bilder till bilder mapp:
Det är allt. Peka din webbläsare till http: //localhost/kohana/index.php/album och du borde se något liknande det här:
Om du försöker skapa ett nytt album eller redigera en befintlig man borde du se något liknande det här:
Naturligtvis krävs några förbättringar för den här applikationen, men med en liten mängd kod har du skapat en liten webapplikation.
Nu vet du hur man använder MVC-mönstret med Kohana, och hur man använder databasbibliotek och hjälpare. För att lära dig mer, läs den officiella dokumentationen.
Tack vare Kohana är kodunderhållning en enkel uppgift, och att lägga till nya funktioner är en cinch. Jag hoppas att du haft denna handledning. Håll dig uppdaterad för att lära dig mer om Kohana.