Examensarbete Webbplats med Zend Framework Pontus Karlsson 2010-05-30 Ämne: Datavetenskap Nivå: B Kurskod: 1DV40E
Abstrakt I den här rapporten skapas en applikation med Zend Framework för att undersöka ramverket närmare. Zend Framework är ett av de största php-ramverken från grundarna av PHP. Rapporten är tänkt att hjälpa företag och privatpersoner, som tänker ta steget till Zend Framework, genom att skapa en introduktion till ramverket. Efter att ha läst rapporten kan förhoppningsvis beslut lättare fattas om företaget har tillräckligt med kompetens eller behov av att använda Zend Framework. - 2 - Pontus Karlsson
Abstract In this report an application is created with Zend Framework to closer examine the framework. Zend Framework is one of the largest PHP frameworks from the founders of PHP. The report is intended to help businesses and individuals who intend to change to Zend Framework, by creating an introduction. After reading this report you can hopefully make a better decision, as if the company has enough skills or the need to start use Zend Framework. - 3 - Pontus Karlsson
Innehållsförteckning Abstrakt... 2 Abstract... 3 Innehållsförteckning... 4 1. Bakgrund... 5 1.1 Introduktion till problemområdet... 5 1.2 Terminologi... 5 1.3 Avgränsningar... 6 2. Metod... 7 3. Genomförande... 8 3.1 Zend Framework och MVC... 8 3.2 Layout... 11 3.3 Zend Form... 14 3.5 Autentisering... 17 3.6 Auktorisering... 19 4. Resultat... 23 4.1 Litchidesign... 23 4.2 Epostformulär... 24 4.3 Inloggning... 26 5. Slutsats... 27 6. Källförteckning... 28 6.1 Litteraturförteckning... 28 6.2 Elektroniska källor... 28 6.3 Figurförteckning... 29-4 - Pontus Karlsson
1. Bakgrund 1.1 Introduktion till problemområdet I denna studie kommer en webbplats för ett påhittat företag att skapas. Litchidesign som förtaget kommer att benämnas i bilder och exempel, har behov av en webbplats för information- och kommunikationssyfte. För framtagningen av webbplatsen kommer ramverket Zend Framework att användas. 1 Det viktiga i studien kommer inte vara att beskriva skapandet av en fullständig webblösning, utan snarare att undersöka ramverket Zend Framework för att studera förkunskapskrav för användning inom ett företag som inte tidigare använt sig av ramverk. Hur lätt är det för en utvecklare som tidigare inte har använt sig av ett ramverk, att göra denna övergång? Exempel som tas upp i uppsatsen baseras på utvecklingen av Litchidesigns webbplats. 1.2 Terminologi Här förklaras de termer och tekniska uttryck som kommer att användas i uppsatsen. Ramverk Ramverk (framework) betyder grundstomme eller grundstruktur. När man diskuterar detta i samband med webbutveckling beskrivs ett ramverk som en samling klasser eller bibliotek för att utveckla dynamiska webbsidor. 2 Wireframe En wireframe över en webbsida kan förklaras som en ritning över ett hus. Den beskriver alla delar av strukturen och var alla komponenter skall befinna sig i förhållande till varandra. Den beskriver inte vilken färg alla fönster skall ha utan fokuserar på funktionalitet, beteende och innehåll. 3 1 http://framework.zend.com/about/overview [2011-05-12] 2 http://en.wikipedia.org/wiki/framework [2011-04-12] 3 http://en.wikipedia.org/wiki/website_wireframe [2011-04-12] 5
Vanlig information att ha med i en wireframe är: Typ av information Funktionalitet Prioriteringen av funktioner och information Regler för att visa olika typer av information Effekten av olika val som kan göras av användaren Model View - Controller Model-View-Controller (MVC) är ett designmönster som ämnar underlätta arbetet inom systemutveckling genom att dela upp applikationen i olika logiska lager. Hantering av presentation (View) skall inte vara beroende av datahantering (Model). Controllern är en mellanliggande komponent som hanterar användarinteraktionen och gör det möjligt att ändra i de olika lagren utan att andra lager berörs. 4 Detta leder till enklare underhåll av applikationen. 1.3 Avgränsningar Zend Framework innehåller alltför många klasser och funktioner för den här typen av uppsats. Enbart de klasser som kommer att användas i utvecklingen av exempelwebbplatsen kommer att diskuteras mer ingående. De komponenter som kommer att finnas med i utvecklingen av exempelwebbplatsen förväntas skapa en så bred bild av ramverket som möjligt, för att enklare få ett sammanfattande intryck hur ramverket kan användas. 4 http://sv.wikipedia.org/wiki/model-vew-controller [2011-04-19] 6
2. Metod För att ta reda på hur lätt det är för nybörjare att lära sig att använda Zend Framework kommer undersökningen att utgå från Zend Frameworks egna dokumentation, samt böcker som skrivits i ämnet. De delar av ramverket som diskuteras närmare i denna uppsats valdes med anledning av deras frekventa förekomst på många webbplatser. De anses vara de delar som en nybörjare skulle börja med att implementera för att förstå ramverket Zend Framework. Den första delen av studien kommer att ta upp strukturen och katalogsystemet i Zend Framework. Detta för att det är en väsentlig del till att förstå och kunna börja arbeta med ett projekt. Slutligen beskrivs två olika delar, ett kontaktformulär och en inloggningssekvens. Dessa stycken visar på hur flödet i Zend Framework ser ut när man implementerar sina idéer. 7
3. Genomförande 3.1 Zend Framework och MVC Zend Framework baseras på en Model-View-Controller struktur som gör det lättare att dela upp applikationen i logiska delar där alla klasser och filer har en naturlig ordning. I nedladdningen av Zend Framework minimal version 1.11.6, som bara innehåller de grundläggande delarna för ramverket, medföljer en bin-katalog som innehåller filer för att göra anrop mot Zend_Tool. 5 Kommandotolken används för att skicka dessa anrop, som kan skapa hela katalogstrukturen för ett Zend Framework projekt, eller delar av den, som till exempel en vy. Fördelen med att använda Zend_Tool jämfört med att bygga katalogstrukturen för hand är den tidsbesparande aspekten samt att risken för att ett fel inträffar är minimal. 6 Figur 1. Katalogstruktur skapad med Zend_Tool 5 http://framework.zend.com/download/latest [2010-05-05] 6 (Padilla, 2009, s. 27) 8
I public, som Figur 1 visar, sker uppstarten av applikationen och värt att nämna här är att index.php hanterar laddningen av Zendbiblioteket som vanligen placeras i library mappen, samt sätter sökvägen till kärnan i projektet som ligger i application. Bootstrap.php initierar controllern genom dess förvalda sökväg controllers. Här kan fler resurser läggas till under tiden som en applikation utvecklas. Det samma gäller application.ini som bland annat lagrar databasinställningar, sökvägen till bootstrapfilen och felmeddelandehantering. 7 Förutom den tydliga MVC indelningen (se Figur 1) i den tänkta strukturen av ramverket, kan Zend Framework användas separat från designmönstret. Utvecklarna av ramverket kallar detta för användning efter egen vilja. Med detta menas att de flesta av komponenterna i ramverket inte är knutna till designmönstret MVC som i många andra ramverk. 8 Zend Framework är helt objektorienterat och arkitekturen uppmuntrar till återanvändning av kod som speciellt är viktigt vid webbutveckling där multipla vyer ofta används för samma slags data. 9 Zend Framework består av öppen källkod vilket innebär att alla utvecklare kan granska källkoden och buggar kan lokaliseras och åtgärdas snabbt vilket skapar en stabil kod. I mappen tests skapas en avbild av application för att kunna utföra enhetstestning med PhpUnit. Detta kommer inte att diskuteras i detta arbete. När index.php körs initieras Zend_Application som läser in variabeln APPLICATION_ENV i htaccess. Zend Framework erbjuder ett enkelt sätt att växla mellan inställningar i utvecklings- och produktionsarbete genom att sätta värdet i htaccess filen. 10 SetEnv APPLICATION_ENV development När applikationen skapas med Zend_Tool så är arbetsmiljön inställd på produktion och därmed syns inga felmeddelanden. 7 (Lyman, 2009, s. 11) 8 (Evans, 2008, s. 3) 9 (Evans, 2008, s. 4) 10 (Vaswani, 2010, s. 251) 9
Figur 2 visar det typiska flödet i en Zend Webbapplikation. Det första som händer när ett anrop sker är att htaccess filen skriver om anropet till standardformatet och skickar det vidare till index.php. Index.php ställer in sökvägen till applikationen, läser konfigurationsfilen och skapar en instans av Front controllern. Denna undersöker i sin tur URL:en för att hitta rätt kontroller och funktion. 11 Figur 2. Interaktion mellan modeller, vyer och kontrollers 12 Den motsvarande controllern med rätt funktionsanrop gör de ändringar i webbapplikationen som tilldelats den, genom att först anropa modellen och sedan vyn för att presentera resultatet. 13 Om en sökväg inte skulle hittas, kastas ett undantag och errorcontroller.php körs så ett felmeddelande av rätt typ kan visas för användaren. 14 11 (Vaswani, 2010, s. 27) 12 (Vaswani, 2010, s. 26) 13 (Vaswani, 2010, s. 27) 14 (Vaswani, 2010, s. 27) 10
3.2 Layout Utvecklingen av webbplatsen började med att strukturera upp vilka komponenter som är lämpligast att använda för att utforska ramverket. Detta exemplifieras av en wireframe (se Figur 3). Figur 3. Wireframe för Litchidesign Utifrån den wireframe som tagits fram går det att fastslå att delar av webbplatsen inte skulle behöva ändras dynamiskt, såsom Logotyp, Meny och Footer. Det som behövde undersökas var hur Zend Framework hanterade grundstrukturen av webbplatsen för att bara behöva implementera dessa delar en gång. För att slippa upprepa kod och lättare kunna göra ändringar, laddas delar in som templates i ett vy-skript, som kan beskrivas som en grundläggande xhtml-sida där 11
innehåll kan renderas ut på olika sätt. Figur 4 visar ett exempel på hur detta kan gå till. Den första av de två raderna kod i body-taggen renderar ut ett vy-skript som innehåller headern, överst i Html-dokumentet. Nedanför renderas det dynamiska innehållet, som användaren efterfrågat genom rätt controller och action. 15 Figur 4. Exempel på grundläggande vy-skript med platshållare. För att bestämma det grundläggande vy-skriptet måste sökvägen anges i application.ini. 16 resources.layout.layoutpath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = layout 15 (Pope, 2009, s. 102) 16 (Lyman, 2009, s. 29) 12
För att skapa en alternativ design av en webbplats kan teman användas. Genom inladdning av olika stilmallar, som tillsammans bildar ett tema, med hjälp av XML går det lätt att efter behov byta stil på en webbplats. Fördelen är att man bara behöver modifiera designen utan att behöva ändra innehållet på sidan. Alla vyerna under Zend Framework kontrolleras av Zend_View komponenten och tillhandahåller ett antal helpers för uppgifter som vyn utför och har i sin tur olika metoder. Ett exempel för länkning av en stilmall kan se ut på följande vis. 17 $this->view->headlink()->appendstylesheet('/css/font.css); När ovanstående kod används i en vy kommer font.css renderas ut inom head-taggen i vårt vy-skript istället för platshållaren(se Figur 4). För varje tema skrivs ett xml dokument som pekar på sökvägarna till temats stilmallar. Dessa sparas i lämplig katalogstuktur tillsammans med bilder och annat som tillhör temat. Med hjälp av Zend_Config_Xml kan sökvägarna till stilmallarna laddas in och sparas i en Array. Dessa kan sedan skrivas ut i en loop med hjälp av helpers. 18 I boken Beginning Zend Framework ges dessa exempel på helpers som kan vara användarbara för vanliga uppgifter i vyn. 19 doctype(string) skapar <doctype> element headlink() skapar ett <link> element headmeta() skapar ett <meta> element headscript() skapar ett <script> element headstyle() skapar ett <style> element headtitle() skapar ett <title> element 17 (Padilla, 2009, s. 88) 18 (Lyman, 2009, s. 34f) 19 (Padilla, 2009, s. 87f) 13
3.3 Zend Form För att ge användare en möjlighet att skicka meddelanden till webbplatsen skapas ett kontaktformulär med hjälp av ramverket. Figur 5 visar på det flöde som inträffar när en användare väljer att skicka ett meddelande via ett kontaktformulär. Figur 5. Sekvensdiagram för att skapa ett kontaktformulär och skicka det med E-post 14
Zend_Form innehåller många intressanta verktyg för att smidigt skapa formulär med olika typer av element. Zend_Form serverar formuläret som PHP-objekt och ingen html behöver användas i koden. 20 Enligt god sed skapas en mapp för alla formulär vilket medför enkelt återanvändande. För att rendera formuläret måste vissa tillägg göras i bootstrapfilen. Den förinställda Zend_Loader laddar alla library klasser som följer namngivning enligt Zend Library. I det här fallet skapas ett eget namnutrymme, Form_ med hjälp av Zend_Loader_AutoLoader_Resource som tillåter att sätta egna värden. 21 $resourceloader = new Zend_Loader_Autoloader_Resource(array( 'basepath' => 'Sökvägen/till/mina/formulär', 'namespace' => 'Form_', )); Som Figur 5 påvisar så gör användaren ett anrop mot KontaktController som skapar en instans av den egna klassen Form_ContactForm, vilken i sin tur ärver från ramverkets Zend_Form-klass. Om användaren har fyllt i formuläret och det har skett en Post med validerat data kan epostmeddelandet kan försöka skickas. Efter att ha extraherat data från formulärobjektet och satt de värdena som Zend_Mail kräver görs ett försök att skicka meddelandet. Misslyckas detta fångas ett undantag och meddelar användaren. Om formuläret inte går igenom valideringen renderas det igen och felmeddelanden följer automatiskt med i objektet. Zend_Form är uppbyggt av tre delar, Zend_View för visning, Zend_Validate för validering och Zend_Filter för filtrering. Varje komponent i ett formulär kapslar in överstående delar. 22 Zend_Validate komponenten har hand om valideringen i ett formulär och tillhandhåller många verktyg för validering. Även filtreringsverktyg finns 20 (Vaswani, 2010, s. 71) 21 (Lyman, 2009, s. 67) 22 (Pope, 2009, s. 195) 15
att tillgå genom Zend_Filter komponenten som erbjuder olika sätt att manipulera data i ett formulär. 23 Nedanför följer ett exempel på hur koden för ett epostfält kan skapas med hjälp av Zend_Form. Lägg märke till att genom Zend_Validate väljer vi att validera fältet som epost. Med hjälp av en array kan flera filter eller valideringar skickas in. I det här fallet filtreras textfältet genom att ta bort otillåtna tecken genom Zend_Filter_StringTrim och sedan omvandla alla bokstäver till gemener med Zend_Filter_StringToLower. AddErrorMessage ger oss möjlighet att skapa egna felmeddelanden eftersom de ursprungliga meddelandena är på engelska. För att garantera att fältet inte har lämnats tomt sätter vi setrequired till True. $email = $this->createelement('text', 'email'); $email->setlabel('epost'); $email->setrequired(true); $email->adderrormessage('du måste ange en giltig epostadress'); $email->addvalidator(new Zend_Validate_EmailAddress()); $email->addfilters(array( new Zend_Filter_StringTrim(), new Zend_Filter_StringToLower() )); $email->setattrib('size', 30); $this->addelement($email); Till skillnad från validering på serversidan som ovanstående exempel, kan klientvalidering vara ett bra sätt att låta användaren direkt få ett gensvar ifall ett fällt är fel ifyllt. För att skapa denna funktionalitet används ofta Javascript. Dock betraktas inte klientvalidering som ett helt säkert sätt att validera på, om inte validering på serversidan också tillämpas. 24 LiveValidation är byggt med Javascript och används för klientvalidering. 25 Zend_View helpers har återigen används för att länka in dokumenten vid behov. 23 (Padilla, 2009, s. 130ff) 24 (Vaswani, 2010, s. 79) 25 http://livevalidation.com/ [2011-05-11] 16
$this->headscript()->appendfile('/js/livevalidation/livevalidation.js'); 3.5 Autentisering De flesta webbsidor idag har någon form av inloggning. För att testa hur Zend sköter hanteringen av användare och roller skapas en databas med en enkel databastabell (MySQL) som innehåller användarnamn, lösenord och roll. Zend Framework använder sig av Zend_Db_Adapter, som är en samling klasser för att koppla upp sig mot en databas och inkluderar många kommersiella databassystem som Microsoft SQL server och MySQL. 26 Tack vare ett gemensamt interface går det lätt att byta från det ena systemet till det andra. Zend_Application_Resource_Db gör att man bara behöver lägga till sina inställningar i application.ini och sedan registrera den med Zend_Db_Table som den anslutning som förvalt kommer användas. 27 resources.db.adapter = "pdo_mysql" resources.db.params.host = "127.0.0.1" resources.db.params.username = "root" resources.db.params.password = "" resources.db.params.dbname = "litchidesign" resources.db.isdefaulttableadapter = true Efter att ha hämtat vår förvalda adapter kan den skickas. Det gör den tillsammans med tabellnamnen och tabellen där användarnamn och lösenord är lagrade, när vi skapar en instans av Zend_Auth_Adapter_DbTable. 28 $dbadapter = Zend_Db_Table::getDefaultAdapter(); $authadapter = new Zend_Auth_Adapter_DbTable($dbAdapter); $authadapter ->settablename('users') ->setidentitycolumn('username') 26 http://framework.zend.com/manual/en/zend.db.adapter.html [2011-05-15] 27 (Lyman, 2009, s. 54f) 28 http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html [2011-05-12] 17
->setcredentialcolumn('password'); Genom att sätta värdena setidentity() och setcredentials() med användarnamn och lösenord behöver bara authenticate() anropas för att kolla om en användare är autentiserad. Resultatet som returneras innehåller olika strängar beroende på utfallet. De kan i sin tur testas mot metoden isvalid() på följande sätt. 29 $result = $authadapter->authenticate(); if ($result->isvalid()) För att ha möjlighet att var som helst i applikationen kunna undersöka om en användare är inloggad och auktoriserad sparas värdera, med användarnamn, lösenord och roll, i Zend_Auth. 30 $auth = Zend_Auth::getInstance(); $storage = $auth->getstorage(); $storage->write($authadapter->getresultrowobject(array('user', 'password', 'role'))); Genom att hämta instansen och undersöka om den innehåller en identitet vet vi om en användare är inloggad. Det förinställda värdet för hur länge sessionen sparas är tjugo minuter men möjligheter finns att specificera värdet. 31 Zend_Auth::getInstance()->hasIdentity() 29 (Lyman, 2009, s. 161) 30 http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html [2011-05-24] 31 (Lyman, 2009, s. 168) 18
På liknande sätt kan en användare loggas ut genom att ta bort värdena från Zend_Auth med funktionen clearidentity(). Zend_Auth implementerar Singletonmönstret och kan därför bara lagra en instans åt gången. 32 Det skall tilläggas att Zend Framework har fler sätt för autentisering såsom Digest, HTTP, LDAP och Open ID. 3.6 Auktorisering I många fall räcker det inte att veta om en användare är den de utger sig för att vara som vid en autentisering. Exempelvis kan en användare ha rollen som administratör och då ha obegränsad tillgång till alla sidor på en webbplats. Men om en användare har rollen user har denne begränsad tillgång. För att kontrollera det här behöver vi även auktorisera användaren. Auktorisering är det som bestämmer om någon får göra ändringar för en given resurs och bestäms av Zend_Acl. Som nämnts tidigare så är det bootstrapfilen som kör igång frontcontrollern efter att ha läst in värdena i applikation.ini. Frontcontrollern tillåter tillägg, vilket gör det möjligt att skapa ett sådant för att validera en resurs vid varje anrop, innan anropet skickas vidare till den efterfrågade kontrollern. 33 resources.frontcontroller.plugins.acl = "MyLibrary_Controller_Plugin_Acl" Med en instans av Zend_Acl kan vi lägga till de roller som vi behöver. Rollerna ärver nedåt och varje roll kan ha de rättigheter som tilldelats dem plus de rättigheter som de ärver ifrån. Användaren kan utföra samma uppgifter som gästen plus sina egna tilldelade rättigheter. Gästen kan bara utföra sina egna. 34 $acl->addrole(new Zend_Acl_Role('guest')); $acl->addrole(new Zend_Acl_Role('user'), 'guest'); $acl->addrole(new Zend_Acl_Role('administrator'), 'user'); 32 (Lyman, 2009, s. 159) 33 (Lyman, 2009, s. 166) 34 http://framework.zend.com/manual/1.11/en/zend.acl.introduction.html [2011-05-24] 19
En resurs är något på webbplatsen som behöver skyddas och kan vara en controller. Här finns också möjligheter till arv precis som vid skapandet av roller men det visas inte i exemplet nedan. 35 $acl->add(new Zend_Acl_Resource('index')); $acl->add(new Zend_Acl_Resource('secret')); $acl->add(new Zend_Acl_Resource('admin')); Vad en användare får se och inte får se bestäms av metoderna deny() och allow() som tar tre argument, roll, resurs och rättighet. Om administratören håller alla rättigheter, kan fältet med resurs och rättighet bytas ut mot null. 36 $acl->allow('guest', 'index', array('index')); $acl->allow('user', 'index', array('secret')); $acl->allow('administrator', null); 35 (Allen & Nick, 2007, s. 98) 36 (Lyman, 2009, s. 167) 20
Figur 6. Samverkan mellan Zend_Auth och Zend_Acl 37 Figur 6 visar vad som sker vid ett anrop till en controller på webbplatsen. Med en instans av Zend_Auth kontrolleras om användaren har en identitet lagrad. Om Zend_Auth innehåller en användare sparas rollen i en variabel. Genom att jämföra med de regler som satts upp med Zend_Acl (se nedan) kan användaren med rättigheter skickas till den efterfrågade 37 (Allen & Nick, 2007, s. 101) 21
controllern. Saknar användaren rättigheter skickas denne vidare till formuläret för att logga in. 38 $controller = $request->controller; $action = $request->action; if (!$acl->isallowed($role, $controller, $action)) 38 (Lyman, 2009, s. 168) 22
4. Resultat 4.1 Litchidesign Figur 7. Litchidesigns demonstrerar slutresultatet för Litchidesigns huvudlayout. Bilden visar också hur ett felmeddelande visas när användaren inte fyllt i användarnamn eller lösenord samt en Javascript- och Css-funktion i innehållsdelen. Figur 7. Litchidesigns förstasida 23
4.2 Epostformulär Med hjälp av Zend_Form skapades ett kontaktformulär. Figur 8 visar på klientvalidering medan Figur 9 visar ett exempel på validering på servern med egna felmeddelanden. Figur 8. Litchidesigns Epostformulär 24
25 Figur 9 Validering på servern med egna felmeddelanden.
4.3 Inloggning En administratör har tillgång till sidan som admin länken i footern pekar på. Om man däremot är inloggad som vanlig användare har man inga rättigheter enligt Zend_Acl att se den. Figur 10 visar på detta scenario. Figur 10. En användare som inte har rättigheter att administrera innehåll 26
5. Slutsats Zend ramverket är inte gjort för nybörjare skulle vara naturligt att yttra nu, men jag antar att det beror på hur man definierar nybörjare. Att Zend Framework kräver en förståelse för objektorienterad programmering och PHP är en självklarhet. Att skapa ett Zend Framework projekt för enklare applikationer skulle vara onödigt krångligt, men om du har för vana att upprepade gånger skapa större applikationer är det en annan sak. Tack vare den objektorienterade strukturen kan ett projekt växa med tiden och kod återanvändas. Zend Frameworks egna dokumentation är omfattande men inte särskilt tydlig. Flera böcker har skrivits i ämnet och har bidragit med den största insikten i ramverket. Med böckerna, där man enklare kan följa den röda tråden, kan en helhetsförståelse införskaffas för personer med lite erfarenhet av ramverk. När man införskaffat den övergripande kunskapen blir det lättare att förstå Zend Frameworks egna dokumentation. Att verkligen känna sig trygg med ramverket skulle naturligtvis ta ytterligare tid. Den kunskap som kan införskaffas under tio veckor är bara helhetsförståelse och inga detaljkunskaper. Inga klasser i Zend Library har dissekerats och förklarats noggrannare. Detta är förstås tvunget för en utvecklare som dagligen skulle arbeta med ramverket. Jag antar att den här uppsatsen inte blir riktigt intressant förrän mer övergripande funktionalitet implementeras. Hade mina kunskaper varit mer omfattande när jag började arbeta, skulle det varit intressant att se hur lätt det hade varit att implementera egen funktionalitet kring ramverket och använda den inbyggda funktionaliteten för att arbeta med API som Google, Flickr och Amazon. Det hade också varit intressant att jämföra fler olika ramverk för att upptäcka för och nackdelar. Att arbeta med ett ramverk ger en känsla av frihet och kodningen tar mindre tid, men samtidigt är man utlämnad då man inte har fullständig koll på vad som händer under ytan. Det är svårt att komma med kritik mot Zend Framework i ett mindre arbete som det här, vilket driver oss till slutsatsen att du inte gör bytet till Zend Framework över en helg. Det är ingen tvekan att många timmar kan sparas i framtiden när du behärskar ramverket. Frågan är bara hur lång tid du har på dig att lära dig det. 27
6. Källförteckning 6.1 Litteraturförteckning Allen, R., & Nick, L. (2007). Zend Framework in Action. Greenwich: Manning Publications. Evans, C. (2008). php architect s Guide to Programming with Zend Framework. Toronto: Marco Tabini. Lyman, F. (2009). Pro Zend Framework Techniques, Build a Full CMS Project. New York: Apress. Padilla, A. (2009). Beginning Zend Framework. New York: Apress. Pope, K. (2009). Zend Framework 1.8 Web Applikation Development. Birmingham: Packt Publishing Ltd. Vaswani, V. (2010). Zend Framework, A Beginner s Guide. New York: McGrawHill. 6.2 Elektroniska källor Frameworkzend.com. [Webbsida]. Tillgänglig: http://framework.zend.com/about/overview [2011-05-12] http://framework.zend.com/download/latest [2010-05-05] http://framework.zend.com/manual/en/zend.db.adapter.html [2011-05-15] http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html [2011-05-12] http://framework.zend.com/manual/en/zend.auth.adapter.dbtable.html [2011-05-24] http://framework.zend.com/manual/1.11/en/zend.acl.introduction.html [2011-05-24] 28
Wikipedia.org [Webbsida]. Tillgänglig: http://en.wikipedia.org/wiki/framework [2011-04-12] http://en.wikipedia.org/wiki/website_wireframe [2011-04-12] http://sv.wikipedia.org/wiki/model-vew-controller [2011-04-19] Livevalidation.com [Webbsida]. Tillgänglig: http://livevalidation.com/ [2011-05-11] 6.3 Figurförteckning Figur 1. Katalogstruktur skapad med Zend_Tool... 8 Figur 2. Interaktion mellan modeller, vyer och kontrollers... 10 Figur 3. Wireframe för Litchidesign... 11 Figur 4. Exempel på grundläggande vy-skript med platshållare.... 12 Figur 5. Sekvensdiagram för att skapa ett kontaktformulär och skicka det med E-post... 14 Figur 6. Samverkan mellan Zend_Auth och Zend_Acl... 21 Figur 7. Litchidesigns förstasida... 23 Figur 8. Litchidesigns Epostformulär... 24 Figur 9 Validering på servern med egna felmeddelanden.... 25 Figur 10. En användare som inte har rättigheter att administrera innehåll... 26 29
351 95 Växjö / 391 82 Kalmar Tel 0772-28 80 00 dfm@lnu.se Lnu.se