Zend Framework Tutorial Teil 2: Systemaufbau mit Bootstrap Datei und der Zend Basisklasse

Im ersten Teil dieses Tutorials habe ich in einer Einführung den Aufbau dieses Tutorials erläutert und einen Überblick über die in diesem Tutorial verwendeten Zend Framework Komponenten gegeben. Zudem habe ich die Anforderungen an das TravelloBlog, unserer Beispiel-Anwendung, zusammengefasst. Wenn du den ersten Teil noch nicht gelesen hast, hole dies bitte schnell nach.

In diesem zweiten Teil erläutere ich nun den grundlegenden Systemaufbau für unser TravelloBlog Projekt. Wir werden unsere Verzeichnisstruktur aufbauen, eine Bootstrap Datei erstellen und die erste Zend Framework Komponente, die Zend Basisklasse, laden.

Wenn du über neue Tutorial Teile informiert werden möchtest, abonniere am besten den Feed dieses Blogs. Dann verpasst du garantiert keinen Teil des Tutorials. Es gibt auch Übersicht mit den bisher erschienen Teilen des Tutorials.

Wichtig: Dieses Tutorial setzt die Zend Framework Preview Version 0.6.0 voraus und kann bei der Verwendung einer aktuelleren Version aus dem SVN unter Umständen nicht zu 100% funktionieren.

Inhaltsverzeichnis

Verzeichnisstruktur

Im Zend Framework Manual gibt es einen guten Vorschlag für eine Verzeichnisstruktur, den ich leicht abgewandelt habe.

Für unsere Anwendung lege bitte folgende Verzeichnisstruktur an:

/travelloblog
    /application
        /config
        /controllers
        /models
        /views
    /library
        /zf
    /public
        /_files
            /css
            /images
            /js

Das Verzeichnis "/travelloblog/application" beinhaltet somit die Dateien für die Konfiguration sowie unsere Model-View-Controller Dateien (mehr dazu im nächsten Teil des Tutorials).

In das "/travelloblog/library" Verzeichnis kommen alle Bibliotheken, die wir für unser TravelloBlog benötigen. Lade die aktuellste Version des Zend Frameworks von der Website herunter und entpacke das Archiv in ein temporäres Verzeichnis, welches in der Regel "ZendFramework-0.6.0" heißen sollte. Kopiere alle Dateien und Unterverzeichnisse aus dem Verzeichnis "ZendFramework-0.6.0/library/" in dein Projektverzeichnis "/travelloblog/library/zf". Das war es dann schon.

Ich habe extra für das Zend Framework unter "/travelloblog/library" ein eigenes Verzeichnis "/zf" angelegt, damit wir später auch andere Bibliotheken (Smarty, eZ components) dort ablegen können.

Alle Dateien, die über den Webserver erreichbar sein sollen, kommen in das Verzeichnis "/travelloblog/public". Dies wären unsere Bootstrap Datei sowie alle Grafiken, CSS und Java Script Dateien.

.htaccess

Mit Hilfe der .htaccess Dateien, die der Apache Webserver aus jedem Verzeichnis lesen kann, können wir bestimmte Regeln festlegen, inwieweit ein Verzeichnis gelesen werden kann.

Damit niemand auf die Dateien in den Verzeichnissen "/travelloblog/application" und "/travelloblog/library" zugreifen kann, lege dort eine .htaccess Datei mit folgendem Inhalt an:

deny from all

Hierdurch stellen wir sicher, dass kein Besucher über den Webserver direkt auf diese Verzeichnisse zugreifen kann. Im Verzeichnis "/travelloblog/public" legen wir eine weitere .htaccess Datei mit folgendem Inhalt an:

AddType application/x-httpd-php5 .php

RewriteEngine on
RewriteRule .* index.php

Falls auf deinem Webserver sowohl PHP 4 als auch PHP 5 laufen und die Dateiendung ".php" mit PHP 4 verknüpft ist, kannst du mit Hilfe der ersten Zeile sicherstellen, dass alle ".php" Dateien immer durch PHP 5 verarbeitet werden. Läuft auf deinem Server sowieso nur PHP 5 kannst du diese Zeile weg lassen.

Die letzten beiden Zeilen aktivieren das mod_rewrite Modul vom Apache Webserver und leiten alle Anfragen auf die Datei "index.php" in diesem Verzeichnis um. Damit aber nicht auch alle Abrufe für die Grafik- und CSS Dateien automatisch auf die "index.php" Datei umgeleitet werden, müssen wir im Verzeichnis "/travelloblog/public/_files" noch eine weitere .htaccess Datei mit folgendem Inhalt anlegen.

RewriteEngine off

Options -Indexes

Die erste Zeile schaltet die RewriteEngine für dieses Verzeichnis und alle Unterverzeichnisse wieder aus. Durch die zweite Zeile stellen wir sicher, dass das automatisch vom Apache Server angezeigte Directory Listing nicht angezeigt wird.

Das Verzeichnis "_files" in "/travelloblog/public/" beginnt übrigens mit einem Unterstrich, damit wir später beim Routing keine Probleme bekommen, falls wir mal einen Controller mit Namen "FilesController" verwenden möchten. Zu den Controllern kommen wir jedoch erst im nächsten Teil dieses Tutorials.

Bootstrap Datei

Unter einer Bootstrap Datei versteht man eine Datei, welche die Auslieferung der gesamten Website erledigt. Bei einer MVC-Anwendung (Model-View-Controller) sollte dies in der Regel die einzige ausführbare PHP Datei im öffentlichen Verzeichnis des Projektes sein. Durch das Aktivieren der RewriteEngine vom Apache Webserver haben wir sichergestellt, dass alle Anfragen an den Webserver auf diese Bootstrap Datei umgeleitet wird.

Lege nun also im Verzeichnis "/travelloblog/public/" eine Datei mit dem Namen "index.php" mit folgendem Inhalte an:

PHP:
  1. <?php
  2.     echo "Hallo Welt!";
  3. ?>

Wenn du jetzt in deinem Browser die Adresse "http://localhost/travelloblog/public/" aufrufst, sollte der Text ausgegeben werden. Du kannst auch beliebige andere Adressen ausprobieren, wie z.B. "http://localhost/travelloblog/public/geht/das" oder "http://localhost/travelloblog/public/script.php?foo=bar". Jedes Mal sollte der kurze Text ausgegeben werden.

Zend Basisklasse laden

Bisher ist die Bootstrap Datei noch ein wenig nutzlos. Es wird also Zeit unsere erste Zend Framework Komponente zu laden: die Zend Basisklasse.

Diese Klasse stellt verschiedene statische Methoden bereit, die das Arbeiten mit dem Zend Framework erleichtern. Zum einen können andere Dateien, Klassen und Interface geladen werden und zum anderen wird ein Objektspeicher bereit gestellt. Bitte füge in deiner Bootstrap Datei folgenden Code ein:

PHP:
  1. <?php
  2.     if (!class_exists('Zend')) require_once 'Zend.php';
  3.    
  4.     echo "Hallo Welt!";
  5. ?>

Hiermit möchten wir sicherstellen, dass die Datei "Zend.php" nur geladen wird, wenn die Klasse "Zend" noch nicht existiert. Wenn du nun in deinem Browser wieder die Adresse "http://localhost/travelloblog/public/" aufrufst, erhältst du eine Fehlermeldung, die besagt, dass die Datei "Zend.php" nicht geladen werden konnte.

Wir haben bisher das Verzeichnis "/travelloblog/library/zf" mit den Zend Framework Dateien noch nicht in unseren include_path aufgenommen. Dies müssen wir schnell nachholen.

Den include_path für unser Projekt setzen

Dafür gibt es mehrere Wege. Zum einen kannst du das Verzeichnis zum Zend Framework in deiner globalen "php.ini" Datei in den include_path mit aufnehmen. Dies könnte aber unter Umständen zu einem langen Liste an Verzeichnissen führen, die für alle Projekte auf deinem Entwicklungsrechner abgearbeitet werden.

Deshalb liegt es nahe, in dem Verzeichnis mit der Bootstrap Datei eine lokale "php.ini" Datei anzulegen, welche den include_path für das Projekt setzt. Die lokale php.ini Datei wird jedoch unter Windows nicht gelesen, wenn PHP als CGI und nicht als Apache-Modul betrieben wird. Unter Linux funktioniert dies problemlos.

Stattdessen habe ich mir auf meinem Entwicklungsrechner folgende Vorgehensweise angewöhnt. In meiner globalen "php.ini" Datei (liegt bei mir unter "c:/wamp/php5/php.ini") füge ich dem include_path die relative Pfadangabe "../application/config" hinzu. Das könnte dann wie folgt aussehen:

include_path = ".;../application/config"

Im Verzeichnis "/travelloblog/application/config" erstelle ich dann eine Datei "set_include_path.php" mit folgendem Inhalt.

PHP:
  1. <?php
  2.     $include_path = get_include_path();
  3.     $include_path.= PATH_SEPARATOR . 'e:/travelloblog/library/zf';
  4.    
  5.     set_include_path($include_path);
  6. ?>

In meiner Bootstrap Datei lade ich nun diese Datei, bevor ich die Zend Basisklasse anfordere. Die Bootstrap Datei sieht dann so aus:

PHP:
  1. <?php
  2.     require_once('set_include_path.php');
  3.    
  4.     if (!class_exists('Zend')) require_once 'Zend.php';
  5.    
  6.     echo "Hallo Welt!";
  7. ?>

Wenn du die Adresse "http://localhost/travelloblog/public/" in deinem Browser neu aufrufst, sollte die Fehlermeldung verschwunden sein. Stattdessen wird nur der kurze Text ausgegeben. Du fragst dich nun sicher, warum ich das so kompliziert mache und nicht einfach den include_path direkt in der Bootstrap Datei setze?

Der Grund ist, dass die Bootstrap Datei über den Webserver für jeden erreichbar ist. Ich möchte vermeiden, dass bei einer Verkettung unglücklicher Ereignisse jemand Informationen über meine Verzeichnisstruktur heraus finden kann. Man hat ja schon Pferde vor der Apotheke... - du weißt, was ich meine. Man erfährt immer mal wieder von Geschichten, bei denen ein Server plötzlich alle PHP Dateien im Klartext angezeigt hat.

Außerdem kann ich nun alle Verzeichnisse für das jeweilige Projekt in meinen include_path an einer zentralen Stelle aufnehmen. Momentan ist die Datei "set_include_path.php" zwar noch sehr kurz, dies ändert sich aber im Verlauf des Tutorials.

Einen VirtualHost einrichten

Wenn du statt der etwas unhandlichen Adresse "http://localhost/travelloblog/public/" lieber eine kürzere Adresse wie z.B. "http://travelloblog/" hättest, kannst du dir auch einen entsprechenden VirtualHost einrichten. Dazu musst du die "httpd.conf"Datei öffnen (liegt bei mir unter "c:/wamp/apache/conf/httpd.conf") und nach der folgenden Passage suchen und ggf. das Kommentarzeichen entfernen.

NameVirtualHost *:80

Am Ende musst du dann noch folgendes einfügen:

<VirtualHost *:80>
    ServerName travelloblog
    DocumentRoot "E:/travelloblog/public/"
    ErrorLog logs/travelloblog-error_log
    CustomLog logs/travelloblog-access_log common
</VirtualHost>

Damit dieser VirtualHost unter Windows auch gefunden wird, musst du noch die "hosts" Datei anpassen. Die Datei liegt bei mir (Windows XP Home) unter "c:/windows/system32/drivers/etc/hosts". Unter Linux liegt die "hosts" Datei unter "/etc/hosts". Dort fügst du lediglich die folgende Zeile hinzu:

127.0.0.1       TravelloBlog

Dann den Apache neu starten und im Browser die Adresse "http://travelloblog/" aufrufen. Es sollte in der Ausgabe kein Unterschied zu "http://localhost/travelloblog/public/" bestehen. Sollte dies unter Linux anders funktionieren, wäre ich über einen entsprechenden Hinweis in den Kommentaren dankbar.

Hinweise für Xampp Nutzer

In den Kommentaren sind einige Probleme bei der Verwendung von Xampp aufgetaucht. Wenn du also Xampp mit PHP5 nutzt, solltest du folgende Punkte beachten. Das wichtigste zuerst: getestet habe ich mit der Xampp Version 1.5.3a. Mit älteren Versionen kann es durchaus Probleme geben. Also bitte bringe dein Xampp auf den neuesten Stand.

Die folgende Zeile musst du aus der .htaccess Datei komplett auskommentieren:

AddType application/x-httpd-php5 .php

In der Datei "/xampp/apache/conf/httpd.conf" musst das mod_rewrite Module geladen werden. Dafür musst du nur nach diesen beiden Zeile suchen und ggf. jeweils das Kommentarzeichen # entfernen:

LoadModule rewrite_module modules/mod_rewrite.so

AddModule mod_rewrite.c

Da im xampp Verzeichnis diverse php.ini Dateien vorhanden sind, kann es sein, dass du zuerst die falsche Datei erwischt. Öffne bitte die Datei "/xampp/apache/bin/php.ini" und ändere dort den include_path wie folgt:

include_path = ".;C:\\xampp\\php\\pear\\;..\\application\\config\\"

Nach diesen Änderungen sollte eigentlich alles so laufen, wie gewünscht.

Download

Der aktuelle Stand des Tutorials nach diesem zweiten Teil kann auch herunter geladen werden. Die Textdateien "empty.txt" habe ich nur angelegt, weil mein Winzip keine leeren Verzeichnisse im Zip Archiv anlegt:

Die Zip Datei enthält nicht die aktuelle Version des Zend Frameworks. Dies musst du bitte selber in das entsprechende Verzeichnis kopieren.

Zusammenfassung

In diesem zweiten Teil meines Zend Framework Tutorials habe ich den grundlegenden Systemaufbau und die Verzeichnisstruktur erläutert. Wir haben diverse .htaccess Dateien angelegt und eine Bootstrap Datei erstellt. Zudem haben wir das include_path Problem gelöst. Zu guter Letzt habe ich noch kurz erläutert, wie du für das Projekt einen eigenen VirtualHost einrichten kannst. Jetzt haben wir die Voraussetzungen geschaffen, um unser Projekt nach und nach mit Leben und Funktionalitäten zu füllen.

Im nächsten Teil dieses Tutorials führe ich dich dann in das Model-View-Controller Konzept ein und wir werden auf Basis der Anforderungen aus dem ersten Teil unsere Controller Klassen erstellen. Dabei lernen wir unter anderem auch die Zend_Controller Komponente kennen.

Fragen, Probleme und Anregungen bitte nicht per E-Mail senden, sondern hier in die Kommentare stellen. Dann haben alle etwas davon.

Change Log

An dieser Stelle werden Änderungen an diesem Tutorial Teil zusammengefasst, die nach dem Ersterscheinen (28.08.2006) notwendig waren, z.B. durch neuere Versionen des Zend Frameworks oder Änderungen am Konzept des Tutorials oder den Anforderungen an unser TravelloBlog.

Navigation

73 Antworten für “Zend Framework Tutorial Teil 2: Systemaufbau mit Bootstrap Datei und der Zend Basisklasse”

  1. Ralf bloggt » Zend Framework Tutorial Teil 1: Einführung und Anforderungen sagt:

    [...] Systemaufbau mit Bootstrap Datei und der Zend Basisklasse [...]

  2. Hans sagt:

    Hallo,

    ich habe zwei Probleme.
    1. die .htaccess Datei im public Verzeichnis verursacht bei mir einen "Internal Server Error". Kommentiere ich den Inhalt dieser Datei aus, läuft die Kiste.

    2. die set_include_path.php Datei lässt sich in der Form "require_once('set_include_path.php')" nicht einfügen, drotz der include_path Erweiterung in der php.ini

    Was könnte ich übersehen haben, mir gehen die Ideen langsam aus.

    PS. Ich verwende Xampp mit PHP5 unter Windows

    Grüße
    Hans

  3. Ralf Eggert sagt:

    Hallo Hans,

    zu 1.: Was passiert, wenn du nur die Zeile hier aus der .htaccess ausblendest:

    AddType application/x-httpd-php5 .php

    Da du Xampp mit PHP5 verwendest, werden alle .php wahrscheinlich sowie schon mit PHP5 geparst. Deshalb benötigst du diese Zeile eigentlich nicht.

    zu 2.: kannst du bitte vor dem require_once('set_include_path.php') einmal folgendes einsetzen und schreiben, was dann ausgegeben wird?

    var_dump(get_include_path());

    Hoffe, das bringt uns ein wenig weiter.

    Gruß,

    Ralf

  4. Thomas B. sagt:

    @Hans, erstelle in dem Pfad /travelloblog/public mal ein php.ini Datei
    und setze dort den include_path (ich bleibe bei Ralf seinem Beispiel):

    include_path = ".;e:\travelloblog\application\config"

    Wenn das funktioniert (kenne XAMP nicht) kannst du da auch die anderen
    Pfade setzen und sparst dir dann die set_include_path.php komplett.

    Thomas

  5. Hans sagt:

    Hallo Ralf, Hallo Thomas,

    zu Ralfs Frage Nr.1:
    wenn ich "AddType application/x-httpd-php5 .php" auskommentiere, erscheint wieder die Fehlermeldung vom Apache Server: 500 Internal Server Error.

    zu Ralfs Frage Nr.2:
    ich erhalte folgende Ausgabe:
    string(20) ".;C:\xampp\php\pear\"

    zu Thomas seinem Vorschlag:
    geht leider so auch nicht, die set_include_path.php kann nicht gefunden werden.

    Hans

  6. Ralf Eggert sagt:

    Hallo Hans,

    ich werde mal schauen, dass ich mal auf einem anderen Rechner Xampp testweise installiere. Dann kann ich das mal testen. Wäre ja blöde, wenn du wegen dieser dusseligen include_path Geschichte nicht weiter kommst. Ich melde mich dann wieder.

    Gruß,

    Ralf

  7. Marc Jakubowski sagt:

    Schöner erster Teil der Reihe, sind soweit alle Fragen geklärt, die sich einem Neuling stellen könnten denke ich.
    Bin auf die kommenden Teile gespannt :)

  8. Marc Jakubowski sagt:

    @Hans
    Schau mal in deiner httpd.conf nach, ob .htaccess dateien überhaupt aktiviert sind.
    Dazu müsstest du einen Directory Tag finden mit dem Pfad zu deinem htdocs Ordner. Bei mir sieht das so aus:

    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride FileInfo
    Options Indexes FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all

    Wenn nicht vorhanden, einfach hinzufügen.
    Wichtig ist, dass AllowOverride auf FileInfo steht, das ist standardmäßig auf None

  9. Marc Jakubowski sagt:

    @Ralf, wie schaffe ich es, dass hier Code nicht herausgefiltert wird? :]
    [Directory "D:/xampp/htdocs"]
    AllowOverride FileInfo
    Options Indexes FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all
    [/Directory]
    Eckige durch Spitze klammern ersetzen

  10. Ralf Eggert sagt:

    Hallo Hans,

    also die folgende Zeile kannst du in der .htaccess auf jeden Fall auskommentieren, weil PHP 5 bei Xampp enthalten ist und .php Dateien bereits parsed.

    AddType application/x-httpd-php5 .php

    Dann musst du einmal die Datei /xampp/apache/conf/httpd.conf öffnen und nach rewrite_module suchen. Diese Zeile darf nicht auskommentiert sein:

    LoadModule rewrite_module modules/mod_rewrite.so

    Dann solltest du schon mal keinen Server Fehler mehr wegen der .htaccess erhalten.

    Das Problem mit der php.ini bei Xampp ist, dass in dem xampp Verzeichnis insgesamt 3 php.ini, 1 php5.ini und 1 php4.ini Dateien vorhanden sind. Ich wusste da auch auf Anhieb nicht, welche verwendet wird. Du musst den include_path auf jeden Fall in der Datei /xampp/apache/bin/php.ini ändern:

    include_path ".;C:\xampp\php\pear\;..\application\config\"

    Dann sollte es erst einmal laufen. Sage bitte Bescheid, ob das geklappt hat. Dann kann ich den Hinweis für andere Xampp Nutzer in das Tutorial übernehmen.

    Gruß,

    Ralf

  11. Ralf Eggert sagt:

    Hallo Marc,

    wie gesagt, der nächste Teil kommt dann wahrscheinlich nächsten Montag. Dann geht es schon tiefer in die MVC Materie.

    Gruß,

    Ralf

  12. Hans sagt:

    Hallo Ralf,

    jap, hat alles geklappt! Danke!
    Freue mich schon auf den nächsten Teil... :)

    Grüße
    Hans

  13. Ralf Eggert sagt:

    Hallo Hans,

    gut zu wissen. Habe die Infos für Xampp Nutzer schon in das Tutorial übernommen.

    Gruß,

    Ralf

  14. Ralf Eggert sagt:

    Hallo Marc,

    habe deinen letzten Kommentar eben erst gelesen. Das müsste mit Maskierung funktioniern:

    <Directory "D:/xampp/htdocs">
    AllowOverride FileInfo
    Options Indexes FollowSymLinks Includes ExecCGI
    Order allow,deny
    Allow from all
    </Directory>

    Gruß,

    Ralf

  15. Ralf’s PHP Blog » Zend Framework Tutorial Teil 3: MVC Design Pattern und Zend_Controller sagt:

    [...] Nach der Einführung in das TravelloBlog Projekt im ersten Teil dieses Tutorials haben wir im zweiten Teil unser grundlegendes System aufgebaut, die Verzeichnisstruktur eingerichtet und eine erste rudimentäre Bootstrap Datei erstellt. Wer mochte, hat sich auch einen VirtualHost auf seinem Entwicklungsrechner eingerichtet. Wenn du die ersten beiden Teile noch nicht gelesen hast, hole dies bitte schnell nach. [...]

  16. markus sagt:

    Hallo ,

    ich habe alles gemacht wie es oben steht aber ich bekomme diese Meldung.

    Warning: require_once(set_include_path.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\travelloblog\public\index.php on line 4

    Fatal error: require_once() [function.require]: Failed opening required 'set_include_path.php' (include_path='.;C:\php5\pear') in C:\wamp\www\travelloblog\public\index.php on line 4

    Und ich verstehe nicht ganz was 'include_path = ".;../application/config" ' bedeutet aber ich habe es so im verzeichnis c:\wamp\php\php.ini eingetragen.

    Woran kann das Problem liegen ?

    Gruß

    Markus.

  17. Ralf Eggert sagt:

    Hallo Markus,

    zur Erklärung: Das "../application/config" besagt, dass zum Laden einer Datei auch aus dem aktuellen Verzeichnis heraus eine Ebene nach oben und dann in das Verzeichnis "application/config" nach dieser Datei gesucht werden soll. Deine "index.php" liegt im Verzeichnis "/travelloblog/public" und durch diesen include_path wird bei einem require() oder include() auch im Verzeichnis "/travelloblog/application/config" gesucht.

    Dein include_path scheint auf jeden Fall nicht korrekt gesetzt zu sein. Die zweite Fehlermeldung gibt den aktuellen include_path aus, nämlich '.;C:\php5\pear' bei dir. Wie ich weiter oben schon geschrieben habe, findet man bei einer Xampp Installation mehrere php.ini Dateien und man muss die Änderung in der richtigen Datei vornehmen. Es kann also sein, dass bei dir auf dem System noch andere php.ini Dateien vorhanden sind. Wenn du einmal ein phpinfo(); in deine "index.php" ganz oben eingibst, sollte dir unter "Configuration File (php.ini) Path" angezeigt werden, welche php.ini verwendet wird.

    Was mich etwas wundert, du hast die Änderung in "c:\wamp\php\php.ini" gemacht, dein include_path ist aber auf ".;C:\php5\pear" gesetzt. Da musst du einmal nachschauen, wo genau PHP5 bei dir installiert ist.

    Wenn alles nichts hilft, dann ändere die Zeile in der "index.php" wie folgt ab:

    require_once('../application/config/set_include_path.php');

    Ich hoffe, ich konnte weiter helfen. Falls nicht, melde dich bitte wieder hier.

    Gruß,

    Ralf

  18. Daniel Henninger sagt:

    Hallo Zusammen,

    habe die .htaccess Dateien in vorgegebener Verzeichnisstruktur mit entsprechendem Inhalt angelegt.

    Beim Aufruf des Links:
    http://localhost/travelloblog/public/
    kommt: Hallo Welt!

    Beim Aufruf des Links:
    http://localhost/travelloblog/public/script.php?foo=bar
    kommt: Objekt nicht gefunden! Die angeforderte URL konnte auf dem Server nicht gefunden werden...

    Warum wird bei mir nicht auf die index.php umgeleitet?

    Setze Xampp 1.5 ein (auf Win XP)

    Gruß,
    Daniel

  19. Daniel Henninger sagt:

    In Tutorial steht:
    include_path ".;C:\xampp\php\pear\;..\application\config\"

    sollte bestimmt folgendermaßen lauten:

    include_path = ".;C:\xampp\php\pear\;..\application\config\"

    Gruß,
    Daniel

  20. Ralf Eggert sagt:

    Hallo Daniel,

    danke für den Hinweis. Habe das eben korrigiert. Hat sich dadurch dann dein Problem gelöst?

    Gruß,

    Ralf

  21. Aaron Müller sagt:

    Ich hab noch eine kleine Anmerkung. Ziemlich weit oben schreibst du:
    "Hiermit möchten wir sicherstellen, dass die Datei "Zend.php" nur geladen wird, wenn die [b]Klasse[/b] "Zend" noch nicht existiert."

    Ist das nicht eine instanz einer Klasse (ein Objekt), das gesucht wird? Oder ist "Zend" eine abstrakte Klasse? Tut mir leid, wenn das etwas spitzfindig rüberkommt, aber es geht mir mehr ums Verständnis, dann diesen Teil habe ich nicht 100% verstanden.

  22. Ralf Eggert sagt:

    Hallo Aaron,

    die Zend Basisklasse ist eine Klasse, die nur statische Methoden enthält und auch nicht instanziert werden kann, d.h. eine $zend = new Zend(); wird nicht funktionieren. Natürlich kann man statt dem

    PHP:
    1. if (!class_exists('Zend')) require_once 'Zend.php';

    auch einfach

    PHP:
    1. require_once 'Zend.php';

    schreiben, weil das require_once() sowieso einen Check macht, ob die Klasse schon geladen worden ist. Ich habe den Check unter anderem eingebaut, um mögliche Probleme auszuschließen, falls die Klasse schon durch in einer per auto_prepend_file automatischen aufgerufenen Datei bereits geladen worden ist.

    Ich hoffe, das ist nun ein wenig klarer.

    Gruß,

    Ralf

  23. Thomas Weidner sagt:

    Servus,

    Betreffend "pingelig" ;-)

    Bei allen PHP Dateien wird empfohlen das schließende "?>" wegzulassen.

    Grüße
    Thomas

  24. Aaron Müller sagt:

    @Ralf: Ja jetzt hab ichs verstanden, vielen Dank!

  25. Ralf Eggert sagt:

    Hallo Thomas,

    ich weiß, nur wehrt sich mein Innerstes irgendwie dagegen ;-)...

    Gruß,

    Ralf

  26. Ralfs PHP Blog » Zend Framework Tutorial Teil 5: MVC Design Pattern und Zend_View sagt:

    [...] Auch dafür bietet das Zend Framework wieder eine passende Lösung. Wie ich schon im zweiten Teil des Tutorials kurz erwähnt hatte, bietet die Zend Basisklasse unter anderem auch einen Objektspeicher. In diesem Objektspeichers können wir beliebig viele Objekte ablegen, um dann an anderer Stelle wieder darauf zugreifen zu können. Wie das im Detail funktioniert sehen wir jetzt. Neue Zend_Registry Komponente [...]

  27. Uwe Wagner sagt:

    Xampp: Nur zu der Info in xampp gäbe es so viele php.ini Dateien. Ein Auszug aus den FAQ des Projektes:

    "im XAMPP liegt die aktive (!) php.ini immer unter xampp\apache\bin....
    Änderungen in der php.ini sowie der httpd.conf brauchen immer einen Apache Neustart!"

    Grüße
    U.W.

  28. Tobias sagt:

    Tolles Tutorial bis jetzt. Nach meiner Anmerkung werde ich auch gleich mal weiter lesen. Nur eine mickrige Sache zu der Windows Host Datei:

    Im Tutorial steht, folgende Zeile soll der Windows Host Datei hinzugefügt werden:
    "127.0.0.1 TravelloBlog"

    Dies habe ich gemacht und nach dem Apache Neustart ging gar nichts mehr. Ursache - bei mir steht in der Datei schon:
    "127.0.0.1 localhost"

    also habe ich die eine IP-Adresse von TravelloBlog in 127.0.0.2 umgeändert. Danach den Apache neugestartet und nun geht wieder alles. (@Firefox User: startet auch den Firefox sicherheitshalber neu, der verhindert auch mal schnell, dass bei dieser Bastellei alles einwandfrei geht)

    Hoffentlich hilft jemand mein Kommentar und ich war nicht der einzigste der 15min rumgebastelt hat :)

  29. Ralf Eggert sagt:

    Hallo Tobias,

    es kann sein, dass ich eine Einstellung in der httpd.conf vergessen habe zu erwähnen. Was steht denn bei dir unter "### Section 3: Virtual Hosts" bei der Einstellung für "NameVirtualHost" genau?

    Gruß,

    Ralf

  30. Felix Pfeiffer sagt:

    Hallo,
    erstmal auch von mir ein Log für dieses Tutorial. Es ist genau das, was ich gesucht habe. Und geht schön ins Detail, damit man nicht nur abtippt sondern auch versteht was man tut.

    Allerdings funktioniert bei mir eine Sache nicht so ganz. Und leider konnte ich den Fehler nicht finden.

    Wenn ich den VirtaulHost einrichte, in meinem fall auf G:/xampp/htdocs/travelloblog/public/ und auch die host-Datei im Windowsverzeichnis aktualisiere, ruft er mir wie gewollt unter http://travelloblog das entsprechende Verzeichnis auf. Allerdings tut er es auch wenn ich http://localhost aufrufe. Naja, und das ist dann doch nicht ganz was ich möchte. Muss ich dann für den localhost auch einen Virtuellen Server anlegen oder muss ich die TravelloBlog Dateien einfach aus meinem "normalen" htdocs-Verzeichnis rausnehmen??

    Vielen Dank für einen kleinen Tipp.

    Felix Pfeiffer

  31. Ralf Eggert sagt:

    Hallo Felix,

    also bei Xampp hatte ich ehrlich gesagt auch Schwierigkeiten mit den VirtualHosts und habe es nicht hinbekommen. Ich weiss nicht genau, ob es auch an der "NameVirtualHost" Einstellung in der httpd.conf liegen kann. Dafür kenne ich Xampp zu wenig. Hatte es neulich nur zum Testen installiert.

    Habe mal gegoogled. Vielleicht hilft dir dieser Link hier weiter?

    http://www.dev.weblication.de/wDev/knowledgebase/articles/20060215_artikel_xampp_virtualhosts.php?category=28

    Gruß,

    Ralf

  32. Tobias sagt:

    in der http.conf unter Virtual Host steht eigentlich nicht wirklich viel, nur Sachen hier aus dem Tutorial:

    ServerName travelloblog
    DocumentRoot "F:/Wamp/htdocs/travelloblog/public/"
    ErrorLog logs/travelloblog-error_log
    CustomLog logs/travelloblog-access_log common

  33. Ralf Eggert sagt:

    Hallo Tobias,

    sieht eigentlich ok aus, aber was steht bei "NameVirtualHost", wie ich oben schon mal gefragt hatte?

    Gruß,

    Ralf

  34. Tobias sagt:

    Hallo Ralf,
    die Zeile ist auskommentiert: #NameVirtualHost *:80
    sorry, hatte deine frage nicht genau genug gelesn.

  35. Ralf Eggert sagt:

    Hallo Tobias,

    kein Problem! Dann nimm das Kommentarzeichen einmal weg und starte den Apache neu. Wenn das noch nicht funktioniert hat, dann ändere die VirtualHost Deklarationen wie folgt ab:

    <VirtualHost *:80>
    ServerName travelloblog
    DocumentRoot "E:/travelloblog/public/"
    ErrorLog logs/travelloblog-error_log
    CustomLog logs/travelloblog-access_log common
    </VirtualHost>

    Also immer VirtualHost *:80 verwenden statt travelloblog oder localhost. Dann wieder Apache neu starten und schauen, was passiert.

    Gruß,

    Ralf

  36. Tobias sagt:

    Nun funktioniert alles wie in Deiner Anleitung :)

  37. Ralf Eggert sagt:

    Hallo Tobias,

    danke für das Feedback. Habe den Hinweis mit dem NameVirtualHost nun auch im Tutorial ergänzt.

    Gruß,

    Ralf

  38. Waldemar Schott sagt:

    Hallo,

    du könntest bei den Einstellungen für den virtuellen Host noch erwähnen, dass unter Linux die hosts-Datei sich unter "/etc/hosts" befindet.

    MfG
    Waldemar

  39. Ralf Eggert sagt:

    Hallo Waldemar,

    danke für den Hinweis. Habe ich nun eingefügt.

    Gruß,

    Ralf

  40. Wolfgang sagt:

    Hallo,
    ich habe dieses Beispiel durchgearbeitet, und alles funktionierte tadellos. Ich bin jetzt wieder bei einem eigenen Projekt. Und irgendwie funktioniert das jetzt nicht so wie ich will.Soll ein CMS werden.
    Aufbau:
    /myCMS
    /config
    /library
    /zf
    /admin
    /controller
    /view
    /model
    /public
    /user
    /controller
    /view
    /model
    /public

    In dem config Ordner hab ich wieder eine set_include_path.php liegen. Ich benutze XAMPP, und habe die php.ini folgendermaßen angepasst:

    include_path = ".;C:\Xampp\xampp\php\pear\;..\config\"
    Jedoch wird die set_include_path.php nicht gefunden wenn ich sie von einer index.html(liegen in den jeweiligen public Ordnern)aufrufe.
    Gebe ich in der php.ini jedoch den kompletten Pfad an, dann funktionierts. Ich finds aber nicht toll...
    include_path = ".;C:\Xampp\xampp\php\pear\;C:\Xampp\xampp\htdocs\myCMS2\config\"

    Wo liegt mein Fehler ?
    Und soll ich die Ordnerstruktur meines CMS überhaupt so aufbauen wie oben geschrieben ?

    Gracias

  41. Wolfgang sagt:

    Ach verdammt, hier ist ein Screenshot meiner Ordnerstruktur:
    [img]
    http://www.dattl.info/stuff/ordner.jpg
    [/img]

  42. Ralf Eggert sagt:

    Hallo Wolfgang,

    versuche es mal mit diesem include_path:

    include_path = ".;C:\Xampp\xampp\php\pear\;..\..\config\"

    Das Problem ist, dass du von deinen "public" Verzeichnissen erst zwei Stufen nach oben gehen musst, bevor du das "config" Verzeichnis finden kannst.

    Die Ordnerstruktur macht schon durchaus Sinn, auch wenn du dann zwei Bootstrap Dateien brauchst, aber das wirst du dir sicher schon gedacht haben...

    Gruß,

    Ralf

  43. Wolfgang sagt:

    Ah, blöder fehler, jetzt passts. Musste außerdem noch den Pfad zur library anpassen. Danke :)

  44. KingCrunch sagt:

    Moin.

    Find es ehrlich gesagt etwas ungelungen, dass dein Tutorial beinhaltet die php.ini zu editieren. Fände es angebrachter die Sache entweder ganz sein zu lassen, oder dies in PHP umzusetzen (als zusätzlichen include-path). Sehe das so, weil (zB) ich ja für irgendwann einen Produktiveinsatz entwickle und nicht jeder Hoster die Editierung erlaubt ;) Ausserdem verwirrt es vielleicht etwas (da es ja eigentlich ums Framework geht und nicht um die ini).

  45. Ralf Eggert sagt:

    Hallo KingCrunch,

    das Problem beim Setzen des include_path ist doch, dass es sehr viele Möglichkeiten gibt, ihn zu setzen. Auf alle Varianten kann ich jedoch nicht eingehen. Da die meisten das Projekt jedoch primär auf ihrem Entwicklungsrechner laufen lassen werden, ist das Setzen in der php.ini fast mit am einfachsten. Aber natürlich steht es jedem frei, den include_path so zu setzen, wie er es für richtig hält bzw. wie es ihm überhaupt technisch möglich ist.

    Gruß,

    Ralf

  46. Martin Lemke sagt:

    Beim Einstieg in Dein Tutorial scheitere ich bereits in Teil 2.

    Der Einfachheit halber habe ich mir auf meiner eigenen Domain eine Subdomain eingerichtet: http://zf.maaaddin.de/ (docroot auf /public). Den Verzeichnisbaum habe ich im den Art "library" beraubt, weil schon für andere Subdomains, die ich nutze Smarty und das ZF zentral zugreifbar installiert sind. Dies nur als Nebenbemerkung; mit meinem Scheitern hat das nichts zu tun.

    Ich habe bisher die übrigen Unterverzeichnisse angelegt, wobei das Verzeichnis "travelloblog" bei mir "zftutorial" heißt. Ich denke auch diese Abweichung ist unkritisch.

    Die index.php im Unterverzeichnis "/public" besteht noch rein aus der Aushabe "Hallo", sodass mögliche Pfadprobleme noch gar keine Rolle spielen können.

    Ich habe die beiden .htaccess angelegt. Die im Verzeichnis /public habe ihc schon in den beiden vorgestellten Varianten, also mit und ohne "AddType application/x-httpd-php5 .php" ausprobiert. In der Symptomatik ergeben beide Varianten keinen Unterschied.

    Die index.php ist nur auf direktem Wege aufrufbar: http://zf.maaaddin.de/index.php ein Aufruf wie http://zf.maaaddin.de/ löst einen "Internal Server Error" aus. Genauso wie http://zf.maaaddin.de/foobar.php

    Falls notwendig zu wissen: Bei meinem Hoster läuft der Server unter Linux ( Apache/1.3 (Unix)) und das mod_rewrite-Modul müsste eigentlich installiert sein, da ich im Supportforum sehe, dass andere damit arbeiten.

    Außerdem habe ich zum Testen eine info.php: angelegt, deren Aufruf ebenfalls einen internal server error (ise) provoziert. Teilweise scheint die Regel also zu greifen, nur die Umleitung auf die Bootstrap-Datei erfolgt nicht. Anstatt ise müsste index.php aufgerufen werden.

    XAMPP installiert meines Wissens Apache 2. Kann es sein, dass der beim meinem Hoster installierte Apache 1.3 mit dieser htaccess-Konfiguration nicht harmoniert?

    Martin

  47. Warui sagt:

    @Martin Lemke:
    Oft ist es bei den 500ern (die du ise nennst ;) ) so, dass man sich im Prinzip nur verschrieben hat und sich am Ende an den Kopf fasst :)
    Um solche Probleme zu lösen, gibt es das Serverlog, das solltest du dir mal anschauen.
    D)f ist da gar nicht soo schlecht zu ;)
    Bei mir geht es, indem ich mich über SSH einlogge und dann im Ordner logs ... naja ... die logs halt anschaue :)

    Versuch bitte außerdem mal, die .htaccess (Mehrzahl) wieder zu löschen, ob du dann an die info.php kannst ...

  48. Martin Lemke sagt:

    Ich habe mich -- das hätte ich gleich tun sollen -- an das Supportforum meines Hosters gewandt.

    Dort wurde kurz nach meiner Frage eine FAQ zu dem Thema gepostet (vermutlich war ich der 1.435ter der das selbe fragte). Danach sollte es folgendermaßen funktionieren:

    RewriteEngine on
    RewriteRule /

    Das tat es aber nicht.

    Ein anderer User nannte mir kommentar los folgende Variante:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ / [L,R=301]

    Das funktioniert damit zwar jetzt, aber ich habe keinen blassen Schimmer was diese Regel beschreibt. Meine .htaccess-Kenntnisse sind eben ausgesprochen rudimentär. Und ich verstehe auch nicht, warum Ralfs Variante bei meinem Hoster nicht funktioniert.

    Martin

  49. Lars sagt:

    Hallo!

    Die Rewrite-Einstellungen funktionieren bei mir auch nicht.

    RewriteEngine on
    RewriteRule .* index.php

    Es funktioniert nur, wenn ich direkt auf den Bootstrap (/index.php) verweise. Alles andere (/, /foobar, usw.) bringt mir 500er.

    In den Logs habe ich folgendes.
    [Sun Feb 11 19:48:44 2007] [error] [client 127.0.3.1] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3046): [client 127.0.3.1] r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /abi2008-gsg/public/index.php
    [Sun Feb 11 19:48:44 2007] [debug] core.c(3052): [client 127.0.3.1] redirected from r->uri = /

    Gruß, Lars

  50. Antje sagt:

    Ich möchte mich auch recht herzlich bedanken für dieses tolle Tutorial.

    Ich bin ein php-Neuling und finde es immer wieder schwer, leicht verständliche Einführungen für gerade neu auf den Markt gekommene Produkte zu finden. Für die Mühe und Hilfestellungen ein riesiges Lob! Schade, daß Du keine Zeit mehr zur Weiterführung dieses Projekts findest. Ich habe intensiv nach Material über das aktuelle Zendframework gegoogelt, bin aber nicht so recht fündig geworden. Hier noch eine Seite mit einem deutschen Tutorial von Gavin Vess (wird immer wieder überarbeitet), die vielleicht einige Leser noch nicht kennen:

    http://framework.zend.com/wiki/display/ZFDEV/2.+Introduction+to+Model-View-Controller+Architectural+Pattern

    Das Tutorial von Gavin finde ich aber nicht so recht überzeugend. Um an das Beispielprogramm zu kommen, muß man erst einmal subversion installieren (was noch das Einfachste an dem ganzen Unternehmen ist) und über komplizierte und schlecht erklärte Wege kann man diese Beispielprogramme wohl auch zum Laufen kriegen (habe ich persönlich nicht geschafft). ABer zum Abgleich zur Version 0.9 findet man auf der obigen SEite einige Anregungen.

    Leider bin ich erst sehr spät auf das Zendframework gestoßen und werde mich peu á peu durch Ralfs Seiten durcharbeiten.
    Im Kapitel 2 bin ich auch über die Rewrite Rule gestolpert
    Arbeite momentan mit folgender Einstellung für den public Ordner:

    RewriteEngine on
    RewriteRule !(index.php) index.php [L]

    Im nächsten Kapitel geht's dann weiter ;)

    Gruß Antje

  51. Gabriel sagt:

    Hei ho,
    erstmal lob an das Tutorial, lässt sich sehr gut lesen.

    Aber ich hab ein Problem.
    und zwar wie so viele hier funktioniert das mit der php.ini nicht.
    hab xampp

    und in die AKTIVE php.ini flogende zeile eingefügt:

    ;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Paths and Directories ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;

    include_path = ".;../application/config"

    ist das erstmal so richtig?

    ok dann hab ich mir die datei "set_include_path.php"
    angeschaut.
    und da gibt es folgende zeile
    "include_path.= PATH_SEPARATOR . 'e:/travelloblog/library/zf';"

    und ich hab so gedacht.. das e:/ könnte für ein Laufwerk stehen...is das richitg?! muss man das anpassen?

    vielen dank für die Hilfe
    lg
    Gabriel

  52. Thomas sagt:

    Hallo, schönes Tutorial!

    Spätestens seit der aktuellen Version 1.0 scheint es allerdings die Basisklasse Zend.php nicht mehr zu geben, daher gibt es beim Versuch diese einzubinden eine Fehlermeldung!!!

  53. Glen sagt:

    @Thomas:
    dann mach draus:
    include "Zend/Loader.php";
    und füge noch ein:
    Zend_Loader::loadClass('Zend_Registry');

    Sollte etwas weiterhelfen hoffe ich. Hab das aus einem anderem TuT.

  54. Pedro Julio sagt:

    Hallo läute,
    zuerst bin ich Neuling. Ich habe bis jetzt alles so gemacht wie von mir verlangt worden ist. Mein System ist eine Mac-OSX-10.4.9.

    Wenn ich folgenden Zeile tippe http://travelloblog.de.dev
    bekomme folgenden Fehlermeldung.

    Warning: require_once(Zend.php) [function.require-once]: failed to open stream: No such file or directory in /Applications/xampp/xamppfiles/htdocs/travelloblog/public/index.php on line 8

    Fatal error: require_once() [function.require]: Failed opening required 'Zend.php' (include_path='.:/Applications/xampp/xamppfiles/lib/php:/Applications/xampp/xamppfiles/htdocs/travelloblog/library/zf') in /Applications/xampp/xamppfiles/htdocs/travelloblog/public/index.php on line 8

  55. Christian sagt:

    Das liegt daran das es die Zend.php ab dem 1.0 Framework nicht mehr gibt. Greif auf Glen seine Variante zurück.. :

    Zitat:
    "
    include "Zend/Loader.php";
    und füge noch ein:
    Zend_Loader::loadClass('Zend_Registry');
    "

  56. Christian sagt:

    Achja, wenn ich:

    http://www.meinedomain.de/travelblog/public

    aufrufe, erhalte ich einen Bad Request!

    Anders, wenn ich:

    http://www.meinedomain.de/travelblog/public/

    aufrufe. (Unterschied, -> Slash am ende..) das liegt doch sicher am Mod_Rewrite oder?

    Und wie kann ich es erreichen das wenn man auf http://www.meinedomain.de geht, er direkt die http://www.meinedomain.de/travelblog/public/ ausführt? (PHP u. HTML weiterleitungen mal ausgeschlossen.. meta weiterleitung und php-header funktion sind mir durchaus bekannt..)

    lg,
    chris

  57. Otto sagt:

    Hallo,

    schade, dieses Tutorial ist nicht aktuell, und ist somit für die aktuelle Zend Version nicht mehr zu gebrauchen. Beispiel, die Basisklasse Zend.php, scheint es gar nicht mehr zu geben. Ich weiß gar nicht wie ich anfangen soll, vieles funktiont nicht, auch nach der offiziellen Zend Framework Doc nicht.

  58. Siemrohr sagt:

    Ich schließe mich Otto voll an. Eigentlich ein gutes Einsteigerprojekt, aber wenn man bei der aktuellen Version (1.0.1) so viel änder muß, dann macht das keinen Spaß mehr.
    Ich habe für den Anfang etwas anderes gefunden -> http://www.akrabat.com (auch auf deutsch)

  59. WebPSM sagt:

    Wird dieses Tutorial in naher Zukunft so umgeschrieben, dass es mit der aktuellen Version funktioniert?

  60. Otto sagt:

    akrabat ist gut, aber noch lange nicht so umfangreich wie dieses tut hier. ich finds eh fragwürdig, wie die firma zend so krawierende änderungen an diesem framework machen konnte. wenn das bei jeden größerem release so sein wird, dann werde ich mit sicherheit nicht lange freute daran haben. dann kann ich mich auch gleich wieder meinen java ee 5 anwendungen widmen... ist eh viel eleganter als diese ganze php gewurchtelei

  61. essi sagt:

    Hallo,
    hat jemand vielleicht inzwischen eine Lösung, wie
    die Einstellungen mit der Version 1.0.1 läuft.
    Ich werde für eure Antworten dankbar

  62. Essi sagt:

    Hat jemand vielleicht die Version(0.6.0)?

  63. Stefan sagt:

    Die Version 0.6.0 würde mich auch interessieren. Ich kann nichts finden.

  64. WebPSM sagt:

    Im November kommt ein Buch zum Zend Framework raus.
    Das hilft uns vielleicht weiter...
    http://www.amazon.de/Zend-Framework-Carsten-M%C3%B6hrke/dp/3836210681/ref=pd_bbs_sr_1/028-0707574-2598101?ie=UTF8&s=books&qid=1188842300&sr=8-1

  65. Stefan sagt:

    http://framework.zend.com/releases/ZendFramework-0.6.0.zip

  66. Simon sagt:

    Ja würde mich auch interessieren ob schon jemand etwas mehr Feedback hat wie man dieses Tutorial trotzdem zum laufen bekommt.

  67. Guido sagt:

    Hallo,

    für das ZendFramework 1.0.2 sind in der index.php folgende Änderungen notwendig:

    aus:
    if (!class_exists('Zend')) require_once 'Zend.php';
    wird:
    if (!class_exists('Zend_Loader')) require_once 'Zend/Loader.php';

    aus:
    Zend::loadClass($class);
    wird:
    Zend_Loader::autoload($class);

    aus:
    $router = new Zend_Controller_RewriteRouter();
    wird:
    $router = new Zend_Controller_Router_Rewrite();

  68. markus sagt:

    Hallo,

    Ich habe auch mit der Ini Klasse ein paar Probleme. Wäre nett, wenn jemand die aktuelle Version der index.php posten könnte. Ansonsten bin ich von Tutorial echt begeistert! :)

    Danke, markus

  69. Johny sagt:

    Gut geschriebener Artikel, gefällt mir nimmt auch rücksicht auf ausnahmen

  70. Jörg sagt:

    Hallo zusammen,

    eine Frage zum Thema VirualHost: Ich prefixe alle Developer ServerNames mit dem Kürzel "dev.". Also z.B.: ServerName dev.irgendwas.de.
    Wie kann ich diese Art von Hosts im Firefox für einen eingestellten Proxy umgehen? Habe im Feld "Kein Proxy für:" bereits "dev." eingetragen, was aber leider nicht funktioniert.
    Dank und Gruß
    Jörg

  71. Hans sagt:

    Hab ein Problem: Bei mir gibts keine Zend.php????!!!!! Wo ist die den hingekommen?

  72. Duffman sagt:

    ich bin langsam am verzweifeln. bei dem aufruf http://localhost/jobapp/public wird die IndexController::indexAction aufgerufen, wie es auch sein soll. nur sobald ich eine andere action wie http://localhost/jobapp/public/add oder http://localhost/jobapp/public/index/add meint der frontcontroller das er den jobapp-controller nicht finden kann. was auch verstaendlich ist, da es solche einen nicht gibt. der front-controller glaubt, dass http://localhost/ ein controller-verzeichnis ist und sucht dort nach den entsprechenden controller, nur hab ich das nirgends angegeben.

    $this->frontController = Zend_Controller_Front::getInstance();
    $this->frontController->throwExceptions($config->resources->frontController->throwException);
    $this->frontController->returnResponse(true);
    $this->frontController->setControllerDirectory($config->resources->frontController->controllerDirectory);
    $this->frontController->setParam('registry', $this->registry);

    $config->resources->frontController->controllerDirectory steht in einer ini-datei: c:\xampp\htdocs\jobapp\application\controller

    bitte um hilfe

  73. Patrick sagt:

    Kurze Frage, ich nehme dies als Einstieg in Zend Framework und als Wiedereinstieg in Php, bei meiner Zend V. gibts keine Zend.php welche soll ich nun nehmen ?

Hinterlasse eine Antwort