Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/mu-plugins/gkphp.php on line 1
Zend Framework « Php « Categories « Daniel Liljeberg

Arkiv för ‘Zend Framework’ kategori

Warning: Use of undefined constant archives - assumed 'archives' (this will throw an Error in a future version of PHP) in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: Use of undefined constant page - assumed 'page' (this will throw an Error in a future version of PHP) in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: A non-numeric value encountered in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: A non-numeric value encountered in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32
class="post-198 post type-post status-publish format-standard hentry category-eclipse category-javascript category-php category-sql category-subversion category-video category-zend-framework">

Förslag till en samling tutorials

30 maj, 2011

Jag har funderat lite på vad man skulle kunna göra en tutorial/kurs om. Det finns ju otroligt mycket bra information på nätet redan och även om detta mest hade varit en kul liten grej så hade det varit roligt om någon lärde sig något på samma gång. Jag tror att jag kommer rikta in mig på en webapplikation av enklare slag skriven i PHP. Med enklare menar jag då, inte som omfattande. Vi skall fortfarande använda oss av abstrakta databaslager, AJAX och annat trevligt. Mycket då det saknas en del bra information för den svenska publiken om PHP men också för att det händer mycket med språket. Det möjliggör också för många att testa på det då alla delar vi kommer använda oss av kommer vara gratis (eller ha en free trial) utan att bli beroende av tredjepartslösningar som exempelvis Mono om man nu sitter i exempelvis Linux. Jag är dock inte partisk utan kan mycket väl se att vi i ett senare skede gör om exakt samam applikation i .Net för att se likheter och skillnader.

Jag tänkte försöka utgå ifrån att inte förvänta mig en massa kunskap av de som tar del av materialet. Men naturligtvis så kommer det att hjälpa om man utvecklat tidigare då jag endast kort kommer gå igenom grunder och sedan gå in på lite mera avancerade områden. Jag tänker mig följande upplägg

  1. Sätta upp lokala utvecklingsverktyg och saker att tänka på (OS, IDE, användbara plugins etc)
  2. Sätta upp server (utvecklingsstack, databas, versions hantering etc)
  3. Lite kort om PHP, karakteristiska saker med språket. Styrkor och svagheter etc.
  4. Ett antal enklare mindre program som visar lite på olika sätt att koda under PHP (och många andra språk också)
  5. Enklare introduktion till OOP och hur PHP hanterar detta.
  6. Introduktion till Zend Framework
  7. Introduktion av MVC mönstret

Sedan börjar vi knacka på vår lilla applikation och börjar då titta på hur Zend Framework hanterar views etc. Sedan går vi in på användarhantering, åtkomstkontroll, osv.

Detta är bara en idé om punkter att ta upp och jag tror att det hela, dynamisk, växer fram med tiden. Finns det några idéer eller önskemål så kom gärna med förslag.

Flattr this!

Warning: Use of undefined constant archives - assumed 'archives' (this will throw an Error in a future version of PHP) in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: Use of undefined constant page - assumed 'page' (this will throw an Error in a future version of PHP) in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: A non-numeric value encountered in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32

Warning: A non-numeric value encountered in /www/webvol34/an/96qmbdpibm1sspm/danielliljeberg.se/public_html/blog/wp-content/themes/cordobo-green-park-2/archive.php on line 32
class="post-131 post type-post status-publish format-standard hentry category-php category-zend-framework">

Dela "okända" objekt mellan isolerade moduler i Zend Framework

28 december, 2010

 

Jag ställdes nydligen inför ett scenario där jag ville isolera varje modul i ett ZF projekt ifrån varandra. Systemet skulle själv känna av vilka moduler som var installerade och de skulle i princip sköta sig själva. Alla javascript och andra saker som de behövde skulle de själva inkludera och initiera via sina Boostraps.

En del saker som skulle delas av hela systemet lades i /library/Core men utöver det så skulle ingen module behöva ha kännedom om någon annan modul. Detta är rellativt enkellt men då jag ändå ville att en del saker skulle se centraliserade ut för användaren så dök mitt lilla problem upp.

Låt oss tex säga att vi har en UserController i vår default modul. I denna har vi editAction som skall presentera settings för användaren som denna kan ändra. Så länge detta bara är ifrån grundobjektet för en User så är det ju inga problem alls. Men låt oss nu säg att vi även har en Messages modul som hanterar meddelanden. Användaren skall kunna göra inställningar för denna modul, men vi vill inte att användaren skall behöva gå in i Messages modulen och göra inställningarna där. Vi vill istället att alla inställningar som är kopplade till användaren, oavsett till vilken modul de hör, skall göras ifrån samma settings sida för vår användare.

Jag började med en lösning där alla formulär som hanterade en användares inställningar ärvde ifrån UserSettingsForm. Sedan skapade jag möjligheten att registrera dessa formulär på ett centralt ställe (jag la den i Zend_Registry i en array som hette user_settings_forms)’. Sedan loopade jag igenom denna lista av formulär och visade upp dem alla när man besökte /user/edit och således körde editAction i UserController.

Detta lilla koncept har jag dock vidareutvecklat och gjort mera generellt och presenterar det här nedan. Tanken är att man skall kunna ha ett centralt register där man kan lägga objekt som skall användas på ett centralt ställe. Om vi tar exemplet ovan så ser det nu ut enligt följande.

Jag utveckalr fortfarande detta koncept en del så några saker kan ändras eller behöva lite puttsning. Tex singleton hanteringen här kommer bli lite knas då flera olika Object_Registry’s kan ärva ifrån denna klass. Vi börjar med en Abstract klass som kallas Core_Object_Registry_Abstract.

Sedan så implementerar vi ett simpelt register för som bara accepterar forulär.

Sedan gör vi en specialicering av denna för våra formulär med användarens inställningar.

Det vi gör här är att vi säger att det enda som accepteras i detta register är objekt av typen Core_User_SettingsForm. Vi skapar även möjligheten att tala om för registret vilken användare det är vi skall jobba med och har implementerat funktionen setUser i alla formulär av typen Core_User_SettingsForm. Denna funktion skapar i grundklassen ett gömt element i formuläret med id på användaren för att identifiera denna och i specialiseringar i varje kalls så har den hand om att plocka ut nuvarande data för användaren och fylla i denna i formulären när vi presenterar dem. Core_User_SettingsForm låter oss även sätta överskrift på just detta formuläret. Jag visar alla formulär i en tabbcontainer så därför ville jag ha detta.

Om vi sedan tittar på Messages_Form_UserSettingsForm så kan den tex se ut såhär.

Som synes så hämtar vi ut nuvarande data för användaren gällande hans inställningar för meddelanden i funktionen setUser.

I Messages modulens bootstrap så lägger vi till

Detta görs sedan i varje modul som har inställningar som användaren skall kunna göra i sin sida för inställningar.

I vår default moduls editAction för vår UserController så har vi sedan

Nu kommer kunna visa alla formulär som är till för att sätta användarens inställningar på ett och samma ställe, utan att en enda modul behöver känna till något om någon annan modul.

Jag använder ju nu detta till formulär, men detta kan appliceras på i princip allt som skall kunna presenteras eller på ett centralt ställe utan att själva kärnan i applikationen behöver känna till alla moduler och deras uppbyggnad.

Som synes så skapas inte objekten i registret innan de kallas vilket sparar prestanda, men det finns mera jobb att göra på detta.

Som avslutning vill jag nämna att man hade kunnat åstakomma ungefär samma beteende med ett observer-pattern, men jag kände att jag fick bättre kontroll på alla delarna på detta sätt.

Flattr this!