Download & Info – SHFW (HMVC-Framework in PHP)

Aufgrund der enormen Anzahl an Anfragen, die mein Framework betreffen, habe ich diese Seite hier eingerichtet. Ihr könnt hier jeweils die aktuellste Version des HMVC-Frameworks (das übrigens jetzt einen richtigen Namen hat: SHFW) herunterladen und eure Meinung dazu abgeben.

Bitte beachten: In der aktuellen Version rate ich von einem produktiven Einsatz noch ab. Das SHFW wird zwar von mir schon in 3 Projekten erfolgreich eingesetzt, ich kann jedoch nicht garantieren, dass es allen Sicherheitsansprüchen genügt. Zum Lernen und Kritisieren ist es aber bestens geeignet 🙂

Allgemeine Informationen zum SHFW

Auf dem Blog von net-developers.de findet ihr viele Informationen über mein (H)MVC-Framework verteilt über mehrere Artikel. Die wichtigsten habe ich hier für euch aufgelistet

  • Das (leider veraltete) Tutorial
  • Das neue Tutorial (in Arbeit)

Anforderungen

Entwickelt und getestet habe ich das Framework mit PHP 5.3. Da die neuen Features der PHP-OOP genutzt werden, wird das Framework mit PHP4 nicht funktionieren. Ich empfehle mindestens PHP 5.3 für einen stabilen Betrieb.

Lizenz

Das Framework darf unter Nennung meines Namens frei benutzt werden.

Bitte gebt mir Feedback

Wenn ihr das Framework getestet habt, dann würde ich mich riesig über Kritik und Verbesserungsvorschläge, aber auch über Lob freuen. Hierzu könnt ihr sowohl die Kommentarfunktion unter diesem Artikel, als auch unser Forum oder den Weg per E-Mail nutzen.

Downloads

  • Version 0.1 (13. Februar 2011): shfw_v0-1 als .zip [Aktuell]

Changelog

Version 0.1 – 13. Februar 2011

  • HMVC-Unterstützung hinzugefügt
  • Umstellung auf Namespaces
  • Singletons komplett abgeschafft
  • Einige kleinere Verbesserungen
  • Diese Downloadseite eingeführt 🙂
1 Star2 Stars3 Stars4 Stars5 Stars (1 Stimme, durchschnittlich 5,00 / 5)
Loading...


26 Kommentare zu “Download & Info – SHFW (HMVC-Framework in PHP)”

  1. Hallo,
    ich hab mir dein altes tut schon oft angesehen, wollte aber nicht weiter reinkcken, weil ich es nicht downloaden kann( also das gesamte tu… Kann ja nicht die ganze zeit online sein(oder stundenlang))
    Würde mich über eine volle downloadbare dokumentation freuen 🙂

    MFG!
    PS: Falls das im zip schon drin ist, entschuldige ich mich

  2. Hi!
    Das gibt es leider nicht. Alle Informationen sind nur online verfügbar.

    Du kannst aber doch die HTML-Seiten offline verfügbar machen.

    MfG
    Simon

  3. Schön, dass es nun eine neue Version gibt. Ich bin immer noch am Experimentiren mit MVC, aber ich komme leider nicht weiter. Ich komme leider mit diesem Package nicht klar. Es fehlt eine HTACCESS zur Weiterleitung sowie eine Index-Datei. Wie verwendet man dieses HMVC-Framework? Es wäre schön, wenn es eine einfache Demo geben könnte, wie z.B. ein einfaches Gästebuch, um die Datenbanken- und Formaktivitäten in diesem Framework zu verstehen.

  4. Tut mir leid, aber das gibt es nicht. Wenn du willst, schicke ich dir eine Beispieldatei (index.php) zu

  5. Das wäre gut. Meine E-Mail-Adresse habe ich hier hinterlassen. Ich möchte eben gerne wissen, wie man dieses Framework nutzt, anhand einer einfachen Webseite mit einem Formular und ggf. Datenbank.

  6. Schreib mir bitte an simon@net-developers.de
    Ich bin gerade nicht imstande, deine E-Mail-Adresse anzuzeigen.

  7. Jeder der den Code haben möchte und wirklich verstehen will wie er funktioniert, wirft einfach einen Blick in die Google Preview von „PHP Design Patterns“ aus dem O’reilly Verlag. Man findet dort den exakt gleichen Code wieder. Was hier passiert ist nichts anderes, als die Veröffentlichung eines bereits bestehenden Code unter einem anderen Namen. Ich hab das Buch selbst gelesen und meine Erfahrungen gesammelt. Jeder der das Buch liest, möchte unbedingt sein eigenes MVC- Framework bauen. Aber Leute, einfach stumpf den Code aus dem Buch kopieren und als seinen eigenen verkaufen? Das geht gar nicht klar.

  8. Hallo,

    ich habe den Code nicht aus diesem Buch abgeschrieben. Es ist eine Frechheit, mir sowas zu unterstellen. Der Code stammt aus meinem eigenen Kopf und hat eventuell ein paar Einflüsse aus Kohanna, ZF und möglicherweise auch unterbewusst aus diesem Buch. Aber es gibt keine Stelle in meinem Code, die in dem Buch zu finden ist.

    Du kannst mir ja die Stellen zeigen, die angeblich kopiert wurden. Ich bin gespannt!

    Ich bin ja nicht der Guttenberg 😉

  9. Ich hätte auch gern so eine index.php Beispieldatei für das Framework =)
    An marc@mristau.eu bitte

    und noch nen kommentar zu „abgeschriebenem Code“

    Ich denke das es ziemlich schwer ist, z.B. ein Singleton, oder Registry Pattern zu schreiben, zu dem es nicht irgendwo schon identische gibt.
    Die Programmier Patterns haben eben nur eine sehr begrenzte Vielseitigkeit. Alles was man frei machen kann, sind eigene Namen für Methoden getInstance/giveInstance/gibInstanz/.. aber der Inhalt wird oft derselbe sein.
    Solang man nicht unsinnige Namen verwendet, die die Verwendung eher erschweren wird vieles gleich oder ähnlich sein, auch wenn es 100 verschiedene Programmierer geschrieben haben.

    Ich sehe das so, er hat sich aus verschiedenen Quellen Anregungen geholt und daraus ein Framework geschrieben. Es ist sicher nicht schwer im gesamten Code Stellen zu finden die identisch sind, das sind aber vielmals optimale Implementierunge, so das solche in nahezu jedem Projekt vorkommen, das dieselben Patterns verwendet.

    MfG Marc

  10. „…und möglicherweise auch unterbewusst aus diesem Buch.“

    Was soll denn das bitte heißen? 😀
    Nein, natürlich ist der Code nicht eins zu eins übernommen worden. Die Klassen haben selbstverständlich alle einen anderen Namen bekommen, vielleicht unterscheiden sich deine Methodenköpfe auch ein wenig.
    Aber das ist meiner Meinung nach fast alles was aus „deinem eigenen Kopf“ zu diesem Framework beigetragen hat. Natürlich ist es auch so, dass man bestimmte Architekturen bei bestimmten Fällen immer wieder verwendet und dadurch eine leichte Ähnlichkeit bei allen Frameworks besteht, aber allein schon die Tatsache, dass du dem Herrn Marschall ein paar Kommentare weiter oben, eine Beispieldatei zusenden möchtest, die in deinem Fall ( wie solls auch anders sein) die index.php ist, anstatt „dein“ Framework so zu entwickeln, das es auch als Framework nutzbar ist, ist für mich ein weiteres Indiz. Im Buch wird nämlich auch nicht erklärt, wie man denn letztendlich den Start macht. Man programmiert sich seine Komponenten zusammen und alle agieren wunderbar miteinander, aber es wird nirgends erklärt, wir man diese Komponenten nun wirklich als ein bestehendes System in Gang bekommt. Komischerweise kannst du das auch nicht.

  11. Ich bin Anfänger im Bereich von MVC-Frameworks. Um dein Framework besser verstehen zu könne würde ich auch gerne eine Beispieldatei erhalten, wenn möglich.
    Bitte an „sarolf at web.de“.

  12. Also ich hab mir nach dem Buch was programmiert und es klappt problemlos, es ist immer wieder ne index.php abgedruckt und in den Scripten auf der CD ist die auch enthalten. Oder andere Testseiten.
    Das einzige was in den abgedruckten Scripten fehlt sind die require/include Statements.
    Zudem ist beim Framework benutzen die index.php nur der Einstiegspunkt, die Controller, Views oder Commands müssen alle noch zusätzlich selbst implementiert werden, da das Framework sonst einfach ne leere Seite oder nen Fehler ausgibt

  13. Dann melde auch ich mich mal wieder.

    @Marc: Danke für Deine Unterstützung. Genauso ist es nämlich. Bevor ich mein Framework entwickelt habe, habe ich mich ins Thema eingelesen. Neben einigen Artikeln im Internet, Diskussionen in PHP-Foren, usw. habe ich auch PHP Design Patterns gelesen und wurde davon sicherlich inspiriert.

    Ich habe jedoch niemals Code 1:1 irgendwo übernommen, höchstens die Ideen dahinter. Wenn du den Code von Zend FW, CakePHP, Kohanna, Symphony, usw. vergleichst, wirst du auch Übereinstimmungen untereinander und evtl. auch mit dem Buch finden.

    Das lässt sich nicht vermeiden.

    > Nein, natürlich ist der Code nicht eins zu eins übernommen worden.
    > Die Klassen haben selbstverständlich alle einen anderen Namen
    > bekommen, vielleicht unterscheiden sich deine Methodenköpfe auch ein
    > wenig.
    > Aber das ist meiner Meinung nach fast alles was aus “deinem eigenen
    > Kopf” zu diesem Framework beigetragen hat.

    Design Patterns haben es nunmal an sich, dass sie Entwufsmuster sind und die Implementierungen davon sich ähneln. Schreib mal eine Singleton-Klasse, ohne dass man eine Ähnlichkeit mit der Umsetzung in PHP Design Patterns feststellen kann. Viel Erfolg!

    Und dein Problem mit der index.php verstehe ich auch nicht. Natürlich gibt es eine index.php! Wie soll denn das Framework auch sonst arbeiten? In der index.php wird der FrontController instantiiert und gestartet. Der Rest wird vom Framework erledigt. Was ist daran verwerflich? Dass es hier im Artikel keine Beispieldatei gibt?

    Das liegt daran, dass ich kein Demo-Projekt programmiert habe, sondern nur Projekte, die auch produktiv eingesetzt werden. Aber wenn du da mal eine index.php sehen möchtest, gerne:

    <?php
    require_once("../../../shfw/base_config.php");
    require_once("../classes/Hassfach.php");
    
    $m = new Hassfach($config);
    $m->run();
    ?>
    

    Das ist die index.php von einem Spaßprojekt.

    Die Klasse Hassfach regelt dann die Konfiguration der Applikation und lädt den FC:

    <?php
    class Hassfach extends \SHFW\core\Application
    {
        private static $application;
    
        public static function autoload($className)
        {
            $path = self::$application->getConfig()->get("class_path")."/".str_replace("\\", "/", $className).".php";
            if(file_exists($path))
            {
              require_once($path);
            }
            return false;
        }
    
        public function initConfig($config)
        {
            $config->set("www_root", "http://localhost/mvc/projekte/hassfach/www/");
            $config->set("mod_rewrite", true);
            $config->set("class_path", "../classes");
            $config->set("dbconf", "../config/db.ini");
            $config->set("view_class", "HTML");
            $config->set("project_name", "Hassfach");
            $config->set("namespace", "Hassfach");
            $config->set("layout", "Standard.tpl.php");
            $config->set("layout_path", "layout");
            $config->set("template_path", "../view");
            self::$application = $this;
            SHFW\core\Autoloader::register('Hassfach::autoload');
        }
    
        public function init()
        {
            error_reporting(E_ALL);
            date_default_timezone_set("Europe/Berlin");
            $config = realpath($this->getConfig()->get("dbconf"));
            $this->addResource("db", new \SHFW\tools\Model\Database(new \SHFW\core\Config($config), "db1"));
        }
    
        public function initRequestresolver($resolver)
        {
            $resolver->addRoute("fach", new \SHFW\core\Http\RequestResolver\ModRewrite\Route("hassfach/@name@.html", array("controller" => "index", "action" => "showSubject")));
            $resolver->addRoute("richtig", new \SHFW\core\Http\RequestResolver\ModRewrite\Route("richtig/@id@", array("controller" => "index", "action" => "richtig")));
            $resolver->addRoute("comment", new \SHFW\core\Http\RequestResolver\ModRewrite\Route("comment/@id@.html", array("controller" => "index", "action" => "showComment")));
        }
    }
    ?>
    

    Ist es das, was du hier vergeblich suchst?

    Vielleicht sollte ich wirklich mal ein Beispiel-Projekt erstellen, in dem die gänigsten Funktionen meines FWs benutzt und demonstriert werden. Wenn ich nur die Zeit dafür hätte!

    Im Moment schreibe ich nämlich das neue „Tutorial“.

  14. Danke für die Beispiel Implementierung soweit, ein fertiges Beispielprojekt wäre sicher auch nice, oder ne Dokumentation der API, aber das wird denke ich sicher im Tutorial behandelt.
    Das mit der extra Klasse für eine Applikation finde ich eine gute Idee, ich hatte bisher überlegt, einfach eine index.php zu bauen, die zusammen mit mod_rewrite jeweils die passenden App-Controller lädt.

    Ich hab jetzt für mich persönlich anhand des Buches ein FrameWork zusammengebaut und auch noch mit Einfluß von ein paar fertigen Frameworks. Man kann sich beim Programmieren, durch die Patterns sicher viel Zeit ersparen, aber sobald man diese benutzt ist eben der Code ähnlich bis identisch mit anderen Implementierungen, auch wenn man das ganze selbst programmiert.

    Wenn aber immer mehr die Leute bei sowas damit kommen, dass der Code vom eigenen Framework oder einzelnen Klassen identisch im Buch X oder Framework Y steht, denke ich werden diese Leute aufhören ihre Arbeit als OpenSource zugänglich zu machen.

    MfG Marc

  15. Ich weis nicht was Ihr hier alle erwartet … vor dem Erfolg die Götter den Schweiß gesetzt, d.h. man sollte sich mit der Materie auseinandersetzen (Patterns, PHP OO …). Das ist bei jedem Framework so. Ich denke auch, das es dem Autor nicht darum geht ein fertiges Framewrok vorzusetzen sondern eher darum wie man ein Framework entwickelt (entwickeln kann). Unterscheid klar? Mir z.B. dient die ganze Sache hier zur Inspiration. Und ja, ich habe auch das PHP Design Patterns Buch hier liegen und lese darin wenn ich hier etwas nicht verstehe. Ich bitte also höflichst darum die Arbeit des Authors dementsprechend zu würdigen und das eigene Posting vor dem abschicken mehrmals durchzulesen.

  16. @Oli: Vielen Dank!

    @mristau:
    Ja, das kommt alles ins Tutorial. Ist in Arbeit. 🙂

    Ich arbeite im Moment als Praktikant bei einem IT-Unternehmen (allerdings hassen die PHP und benutzen Python. Mir geht es da umgekerht). Ändert aber nichts daran, dass man neue Aspekte der Softwareentwicklung kennenlernt. Und das wird mit ins FW und Tutorial einfließen!

  17. Hey,

    Gibt es denn ein Release-Date, wonach man sich ungefähr richten kann?
    Ansonsten erst mal danke für das Tutorial bzw. auch die Kurzform des MVC in einem Beitrag. Zudem wäre ich sehr verbunden, wenn du das „alte“ Tutorial vlt als PDF anbieten könntest? Ich bin leider viel unterwegs und habe dort kein Internet, so dass etwas zum ausdrucken toll wäre.

    Schöne Grüße

  18. Ein Release-Date gibt es leider nicht. Mitte/Ende Sommer ist geplant. Das alte Tutorial als PDF wird schwer, du kannst doch einfach die HTML-Seiten herunterladen und abspeichern. PDF ist nämlich nicht geplant.

    Und die HTML-Files kann man ja zu PDFs machen 🙂

    MfG
    Simon

  19. Hallo Simon
    auch ich möchte mich für deine Arbeit die du dir mit dem Tut und dem Framework gemacht hast bedanken. Nachdem ich PHP Prozedual gelernt hatte und dann in die OOP einsteigen sollte, hat mir dein Tutorial wichtige Impulse geben können. Ferner finde ich die hier ausgebrochene Diskussion relativ Sinnentleert..

    @PascalPrecht
    Wie bereits mehrfach erwähnt ist es verdammt schwer eine methode so zuu schreiben, dass sie einmalig auf der welt ist. Mal ein Beispiel aus meinem Alltag:
    <?php

    $db_host = 'localhost';
    $db_user = 'root';
    $db_pass = "XXX";
    $db_name = "XXX";

    mysql_connect( $db_host, $db_user, $db_pass)
    or die ( 'Konnte keine Verbindung herstellen!');

    mysql_query('set character set utf8;');

    $db_select = @ mysql_select_db ( $db_name );

    Bitte verrate mir einmal, wie ich diesen Vorgang in eine einzigartige Klasse auslagern soll (reden wir mal nicht davon, dass PDO besser ist).

    Naja back to Topic:
    Ich werde dein Projekt natürlich weiter verfolgen und freue mich schon auf das neue Tut. Vielen Dank für deine Freizeit die du dafür opferst.

  20. @PeeGee: Vielen Dank für deinen Kommentar und deine Unterstützung!

    Ich hoffe, dass ich das Zeug zeitnah fertig bekomme…

  21. Hi Simon, wollte mal nachfragen, wie weit du mit deinem neuen Tutorial bist?

  22. Fertig!
    Nein Spaß, vermutlich werde ich nicht mehr daran weiterarbeiten können. Es kommt einfach immer irgendwas dazwischen. Tut mir leid!

  23. Schade. Könntest du dann wenigstens deine bisherige Arbeit veröffentlichen?

  24. Alles, was ich bisher über mein FW gepostet habe, findest Du, wenn Du in der Suchfunktion „MVC“ eingibst. Mehr als das, was hier online zu finden ist, gibt es nicht. Sorry!

  25. Hi Simon,

    erstmal super Arbeit bisher.

    Ich versuche gerade das Tutorial durch zuarbeiten und das HMVC einmal zum laufen zu bekommen.

    Leider komme ich nicht weiter und hoffe du kannst mir da weiter helfen.

    Meine Struktur schaut so aus:

    htdocs
    -Hassfach
    -classes
    -Hassfach.php
    -config
    -db.ini
    -logs
    -views
    -www
    -index.php
    -.htaccess

    shfw
    -classes
    -shfw
    -core
    -tools
    -base_config.php

    Die index.php:

    run();
    ?>

    Die Projekt.php:

    getConfig()->get(„class_path“).“/“.str_replace(„\\“, „/“, $className).“.php“;
    if(file_exists($path))
    {
    require_once($path);
    }
    return false;
    }

    public function initConfig($config)
    {
    $config->set(„www_root“, „http://localhost/mvc/projekte/hassfach/www/&quot ;
    $config->set(„mod_rewrite“, true);
    $config->set(„class_path“, „../classes“);
    $config->set(„dbconf“, „../config/db.ini“);
    $config->set(„view_class“, „HTML“);
    $config->set(„project_name“, „Hassfach“);
    $config->set(„namespace“, „Hassfach“);
    $config->set(„layout“, „Standard.tpl.php“);
    $config->set(„layout_path“, „layout“);
    $config->set(„template_path“, „../view“);
    self::$application = $this;
    SHFW\core\Autoloader::register(‚Hassfach::autoload‘);
    }

    public function init()
    {
    error_reporting(E_ALL);
    date_default_timezone_set(„Europe/Berlin“);
    $config = realpath($this->getConfig()->get(„dbconf“));
    $this->addResource(„db“, new \SHFW\tools\Model\Database(new \SHFW\core\Config($config), „db1“));
    }

    public function initRequestresolver($resolver)
    {
    $resolver->addRoute(„fach“, new \SHFW\core\Http\RequestResolver\ModRewrite\Route(„hassfach/@name@.html“, array(„controller“ => „index“, „action“ => „showSubject“)));
    $resolver->addRoute(„richtig“, new \SHFW\core\Http\RequestResolver\ModRewrite\Route(„richtig/@id@“, array(„controller“ => „index“, „action“ => „richtig“)));
    $resolver->addRoute(„comment“, new \SHFW\core\Http\RequestResolver\ModRewrite\Route(„comment/@id@.html“, array(„controller“ => „index“, „action“ => „showComment“)));
    }
    }
    ?>

    Leider erhalte ich nur Fehler, das Autoloader.php nicht gefunden werden kann.
    Habe ich die Pfade angepasst findet er andere Klassen nicht mehr.

    Ich gehe davon aus, das meine Projektestruktur (Hassfach) zum einen nicht korrekt ist. (wo kommt ihr Layout und co hin?)
    Und zum anderen die Gesamtstruktur zwischen dem FW und dem Projekt nicht korrekt ist.

    Es wäre super, wenn du da vielleicht ein korrektes Schema für mich hättest.

    Timo

  26. Da ich das Framework seit Jahren weder nutze, noch weiterentwickle, kann ich dir da leider nicht weiterhelfen. Tut mir leid!

Hinterlasse einen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

»Informationen zum Artikel

Autor: Simon
Datum: 13.02.2011
Zeit: 19:00 Uhr
Kategorien: Mein MVC-Framework
Gelesen: 76082x heute: 5x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta