Oct 12
Wenn sich ein Entwurfsmuster in der Web Entwicklung bewährt hat, dann ist es das Model View Controller Pattern oder kurz MVC. Ich bin schon seit längerem auf der Suche nach einem PHP Framework, dass MVC konsequent umsetzt, aber nicht gleich mit Kanonen auf Spatzen schießt. Leichtfüßig (oder in “Neu-Deutsch” light weight) und objekt orientiert sollte es sein. PHP Fameworks, wie z.B. Zend, CakePHP und Symphony gehören da eher zu den Boliden. MVC setzen sie zwar perfekt um, objekt orientiert sind sie auch, aber leichtfüßig ist anders.
So bin ich auf
CodeIgniter gestoßen, was von sich behauptet mit einem “schmalen Fuß” (small footprint) daher zu kommen.
Die Installation ist schon einmal denkbar einfach. Das Zip im “DocumentRoot” des Webservers auspacken, das Verzeichnis umbenennen und die vollständige URL für den Webauftritt in der Konfigurationsdatei system/application/config/config.php angeben.
$config['base_url'] = "http://localhost/allMedia/";
Und schon kann man seinen ersten Controller schreiben.
class Books extends Controller {
... some logic ...
// build view
$this->load->view('common/header',$headerdata);
$this->load->view('book/list',$data);
$this->load->view('common/menu',$menudata);
$this->load->view('common/footer');
}
CodeIgniter ist in der Lage Teile einer View vor dem Ausliefern zusammenzusetzen. Templates werden unterstützt sind aber nicht zwingend notwendig.
Für mich bringt dieses Framework alles mit, was ich brauche:
- das MVC Entwurfsmuster
- durchgängige Objektorientierung
- Performance
- schöne URL’s
- Helper Klassen (z.B. für Paging)
- gute Einbindung von doctrine als OR Mapper
- und nicht zu vergessen eine gute Dokumentation
“Das Feuer ist bei mir entzündet” und ein kleines Projekt bereits mit CodeIgniter implementiert. Wem also Zend und Co. zu komplex sind, der sollte sich CodeIgniter einmal etwas genauer anschauen. Es lohnt sich.
Wenn sich ein Entwurfsmuster in der Web Entwicklung bewährt hat, dann ist es das Model View Controller Pattern oder kurz MVC. Ich bin schon seit längerem auf der Suche nach einem PHP Framework, dass MVC konsequent umsetzt, aber nicht gleich mit Kanonen auf Spatzen schießt. Leichtfüßig (oder in "Neu-Deutsch" light weight) und objekt orientiert sollte es sein. PHP Fameworks, wie z.B. Zend, CakePHP und Symphony gehören da eher zu den Boliden. MVC setzen sie zwar perfekt um, objekt orientiert sind sie auch, aber leichtfüßig ist anders.
So bin ich auf CodeIgniter gestoßen, was von sich behauptet mit einem "schmalen Fuß" (small footprint) daher zu kommen.
Die Installation ist schon einmal denkbar einfach. Das Zip im "DocumentRoot" des Webservers auspacken, das Verzeichnis umbenennen und die vollständige URL für den Webauftritt in der Konfigurationsdatei system/application/config/config.php angeben.
$config['base_url'] = "http://localhost/allMedia/";
Und schon kann man seinen ersten Controller schreiben.
class Books extends Controller {
... some logic ...
// build view
$this->load->view('common/header',$headerdata);
$this->load->view('book/list',$data);
$this->load->view('common/menu',$menudata);
$this->load->view('common/footer');
}
CodeIgniter ist in der Lage Teile einer View vor dem Ausliefern zusammenzusetzen. Templates werden unterstützt sind aber nicht zwingend notwendig.
Für mich bringt dieses Framework alles mit, was ich brauche:
das MVC Entwurfsmuster
durchgängige Objektorientierung
Performance
schöne URL's
Helper Klassen (z.B. für Paging)
gute Einbindung von doctrine als OR Mapper
und nicht zu vergessen eine gute Dokumentation
"Das Feuer ist bei mir entzündet" und ein kleines Projekt bereits mit CodeIgniter implementiert. Wem also Zend und Co. zu komplex sind, der sollte sich CodeIgniter einmal etwas genauer anschauen. Es lohnt sich.
geschrieben von gklinkmann
\\ tags: frameworks, Open Source, php
May 05
Wenn ich momentan eine Java Webapplikation bauen müsste, würde ich sie wahrscheinlich mit dem Spring Framework umsetzen. Im Rahmen der Jax 2010 hat Jürgen Höller (einer der Chefentwickler von Spring) einen Rückblick, eine Bestandsaufnahme und einen Ausblick auf Spring gegeben.
Danach spielte und spielt Spring, wie viele andere Frameworks und alternative Technologien (wie z.B. SWT und GWT), aus seiner Sicht vor allem in der Rolle als Plattform und Standards “Enabler” eine große Rolle. D.h., dass Frameworks innovativer sind und höhere Release Zyklen aufweisen als Standards, wie z.B. JPA. Sie bieten vielmehr sogar die Möglichkeit neue Standards in bestehende Umgebungen zu integrieren.
So ist es mit Spring 3.0 möglich Anwendungen zu entwickeln, die Standards wie JPA 2.0 oder JSF 2.0 nutzen und trotzdem auch auf älteren JBoss, Websphere oder sogar Tomcat Installationen laufen können.
Diese integrative Rolle wird laut Jürgen Höller auch weiterhin den Weg von Spring bestimmen. Dabei sind für Juni/Juli 2010 die Version 3.1 und in 2011 auch die Version 3.2 vorgesehen. Diese werden wie in der Vergangenheit durch Milestone Releases immer nah an den neuesten Versionen der Standards gehalten oder sind ihnen sogar einen kleinen Schritt voraus.
Wenn ich momentan eine Java Webapplikation bauen müsste, würde ich sie wahrscheinlich mit dem Spring Framework umsetzen. Im Rahmen der Jax 2010 hat Jürgen Höller (einer der Chefentwickler von Spring) einen Rückblick, eine Bestandsaufnahme und einen Ausblick auf Spring gegeben.
Danach spielte und spielt Spring, wie viele andere Frameworks und alternative Technologien (wie z.B. SWT und GWT), aus seiner Sicht vor allem in der Rolle als Plattform und Standards "Enabler" eine große Rolle. D.h., dass Frameworks innovativer sind und höhere Release Zyklen aufweisen als Standards, wie z.B. JPA. Sie bieten vielmehr sogar die Möglichkeit neue Standards in bestehende Umgebungen zu integrieren.
So ist es mit Spring 3.0 möglich Anwendungen zu entwickeln, die Standards wie JPA 2.0 oder JSF 2.0 nutzen und trotzdem auch auf älteren JBoss, Websphere oder sogar Tomcat Installationen laufen können.
Diese integrative Rolle wird laut Jürgen Höller auch weiterhin den Weg von Spring bestimmen. Dabei sind für Juni/Juli 2010 die Version 3.1 und in 2011 auch die Version 3.2 vorgesehen. Diese werden wie in der Vergangenheit durch Milestone Releases immer nah an den neuesten Versionen der Standards gehalten oder sind ihnen sogar einen kleinen Schritt voraus.
geschrieben von gklinkmann
\\ tags: frameworks, Java, Open Source
Mar 22
Ich habe ein paar Stunden dafür verwendet mein auf Google Code gehostetes Projekt grum auf den Stand der Dinge zu bringen (es wurde ja auch langsam Zeit). Grum ist eine kleine Grails Anwendung zur Benutzerverwaltung, die es mir ermöglicht mit dem Web Framework Grails “zu spielen”.
Ich habe bei der Umsetzung bewusst auf die vielen Grails Plugins verzichtet, um so wenig Seiteneffekte wie möglich zu haben und es auch für diejenigen einfach zu halten, die einen Einstieg in Grails suchen. So sind in Grum Lösungen enthalten, wie man z.B.:
- den Zugriff auf eine Mysql Datenbank realisiert
- 1:1, 1:n und n:m GORM Beziehungen modelliert
- eigene Tag Libs schreibt
- die JSP Tag Lib displaytag verwendet, um die Daten seitenweise anzuzeigen, zu gruppieren, zu sortieren und in alle möglichen Formate (excel, csv, xml, pdf) zu exportieren
- den Upload von Dateien ermöglicht
- funktionale Tests mit dem webtest Plugin verwendet
- und die Auslieferung von XML aufgrund von besonderen URL’s (kurz Content Negotiation) umsetzt
Die neue Version 0.3 verwendet jetzt grails 1.2.1 und das Plugin webtest in der Version 2.0.3. Die Sourcen, die SQL Dateien zur Erstellung der Mysql Datenbank und ein Webarchiv mit allen notwendigen Bibliotheken stehen auf Google Code zum Download bereit.
Nutztungshinweise:
Der Code kann frei verwendet werden, kann aber Fehler enthalten, für die ich keine Haftung übernehme. Die Lizenzbedingungen der verwendeten Bibliotheken sind einzuhalten.
Ich habe ein paar Stunden dafür verwendet mein auf Google Code gehostetes Projekt grum auf den Stand der Dinge zu bringen (es wurde ja auch langsam Zeit). Grum ist eine kleine Grails Anwendung zur Benutzerverwaltung, die es mir ermöglicht mit dem Web Framework Grails "zu spielen".
Ich habe bei der Umsetzung bewusst auf die vielen Grails Plugins verzichtet, um so wenig Seiteneffekte wie möglich zu haben und es auch für diejenigen einfach zu halten, die einen Einstieg in Grails suchen. So sind in Grum Lösungen enthalten, wie man z.B.:
den Zugriff auf eine Mysql Datenbank realisiert
1:1, 1:n und n:m GORM Beziehungen modelliert
eigene Tag Libs schreibt
die JSP Tag Lib displaytag verwendet, um die Daten seitenweise anzuzeigen, zu gruppieren, zu sortieren und in alle möglichen Formate (excel, csv, xml, pdf) zu exportieren
den Upload von Dateien ermöglicht
funktionale Tests mit dem webtest Plugin verwendet
und die Auslieferung von XML aufgrund von besonderen URL's (kurz Content Negotiation) umsetzt
Die neue Version 0.3 verwendet jetzt grails 1.2.1 und das Plugin webtest in der Version 2.0.3. Die Sourcen, die SQL Dateien zur Erstellung der Mysql Datenbank und ein Webarchiv mit allen notwendigen Bibliotheken stehen auf Google Code zum Download bereit.
Nutztungshinweise:
Der Code kann frei verwendet werden, kann aber Fehler enthalten, für die ich keine Haftung übernehme. Die Lizenzbedingungen der verwendeten Bibliotheken sind einzuhalten.
geschrieben von gklinkmann
\\ tags: frameworks, Grails, groovy, Java, Web
Oct 19
Während ich mich im ersten Teil in meiner kleinen Serie über HTTP Clients mit Pear beschäftigt habe, will ich nun im 2. Teil mein Augenmerk auf das Zend Framework richten.
Auch hier benötigt man 2 Packages zur Erledigung der Aufgabe (s. Teil 1). Das Package Zend_Http ist wie das Pear Package Http_Request2 zur reinen HTTP Kommunikation geeignet.
Mit Zend_Dom kann man das empfangene HTML zerlegen.
Ein Weg zur Lösung der Aufgabe könnte so aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| <?php
require_once 'Zend/Http/Client.php';
require_once 'Zend/Http/Response.php';
require_once 'Zend/Dom/Query.php';
$url='http://www.google.de';
$client = new Zend_Http_Client($url, array(
'maxredirects' => 0,
'timeout' => 30));
try {
$response = $client->request('GET');
if (200 == $response->getStatus()) {
$dom = new Zend_Dom_Query($response->getBody());
$forms = $dom->query('form');
$form=$forms->current();
$action=$form->getAttribute('action');
$client = new Zend_Http_Client($url.$action, array(
'maxredirects' => 0,
'timeout' => 30));
$client->setParameterGet('q', 'http client examples');
$response = $client->request('GET');
$dom = new Zend_Dom_Query($response->getBody());
foreach ($dom->query('a.l') as $link) {
if ($link->hasAttribute('href')) {
$href=$link->getAttribute('href');
$linkText=$link->textContent;
echo "<a href=\"$href\">$linkText</a><br />";
}
}
} else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->responseCodeAsText();
}
} catch (Zend_Http_Exception $e) {
echo 'Error: ' . $e->getMessage();
}
?> |
Der Code spricht eigentlich für sich, deswegen werde ich ihn an dieser Stelle nicht so detailliert erläutern wie noch im ersten Teil.
Der Unterschied besteht im Parsen des HTML’s. Die Methode query() (Zeilen 18 und 31) liefert nämlich kein Array, sonder ein Objekt der Klasse Zend_Dom_Query_Result zurück. Da diese Klasse die beiden Interface Countable und Iterator implementiert, können die Ergebnisse der Anfrage mit einer foreach Schleife durchlaufen werden. Jeder einzelne Treffer wird über ein Objekt der Klasse DOMElement abgebildet.
Fazit:
Auch Zend bietet mit Zend_Http und Zend_Dom einen guten HTTP Client. Nutzt man in seinem Projekt bereits andere Klassen aus dem Zend Framework ist dieser Lösungsansatz empfehlenswert.
Ausblick:
In Teil 3 verlasse ich die PHP Welt und stelle mit HttpUnit einen sehr komfortablen und funktionsreichen HTTP Client für Java vor.
Serie:
Teil 1 - Pear
Während ich mich im ersten Teil in meiner kleinen Serie über HTTP Clients mit Pear beschäftigt habe, will ich nun im 2. Teil mein Augenmerk auf das Zend Framework richten.
Auch hier benötigt man 2 Packages zur Erledigung der Aufgabe (s. Teil 1). Das Package Zend_Http ist wie das Pear Package Http_Request2 zur reinen HTTP Kommunikation geeignet.
Mit Zend_Dom kann man das empfangene HTML zerlegen.
Ein Weg zur Lösung der Aufgabe könnte so aussehen:
Der Code spricht eigentlich für sich, deswegen werde ich ihn an dieser Stelle nicht so detailliert erläutern wie noch im ersten Teil.
Der Unterschied besteht im Parsen des HTML's. Die Methode query() (Zeilen 18 und 31) liefert nämlich kein Array, sonder ein Objekt der Klasse Zend_Dom_Query_Result zurück. Da diese Klasse die beiden Interface Countable und Iterator implementiert, können die Ergebnisse der Anfrage mit einer foreach Schleife durchlaufen werden. Jeder einzelne Treffer wird über ein Objekt der Klasse DOMElement abgebildet.
Fazit:
Auch Zend bietet mit Zend_Http und Zend_Dom einen guten HTTP Client. Nutzt man in seinem Projekt bereits andere Klassen aus dem Zend Framework ist dieser Lösungsansatz empfehlenswert.
Ausblick:
In Teil 3 verlasse ich die PHP Welt und stelle mit HttpUnit einen sehr komfortablen und funktionsreichen HTTP Client für Java vor.
geschrieben von gklinkmann
\\ tags: frameworks, php, Web