2009-12-02 6 views
27

Ich bin kein Troll und mein Ziel ist nicht, einen Flammenkrieg zu beginnen; Ich meine auch nicht, die Autoren des Zend Framework zu missachten: Es gibt eine Menge guter Arbeit darin. Aber ... Ich habe einen Job zu erledigen und es fällt mir schwer, die Popularität von ZF mit der Realität, Apps damit zu bauen, in Einklang zu bringen. Ich würde gerne von anderen wissen, warum sie Zend Framework verwenden.Warum ist Zend Framework so beliebt?

Ich bin ziemlich neu in der PHP-Welt, aber ich habe eine Menge Programmierung in vielen Sprachen gemacht. Nachdem ich viele Tutorials gelesen und ein paar Apps darin erstellt habe, fühlen sich manche Kernfunktionen von Zend Framework wie Alpha-Code für mich an. Für mich erscheinen unter anderem folgende fundamentale Schwächen zu überwältigend, um die Bereitstellung von Apps damit in Erwägung zu ziehen - aber immer wieder wird ZF als eines der führenden, wenn nicht führenden Frameworks vorgeschlagen.

Zunächst möchte ich sagen, dass ich das meiste von ZF als brauchbar finde. Routing funktioniert ziemlich genau so, wie es sollte, die Layout-Einrichtung ist brauchbar (obwohl sie sich stark von Templating-Systemen wie JSP/ASP unterscheidet), ebenso wie die Cache-Einrichtung, etc. Es scheint eine Tendenz in der Community zu geben, eine Menge Modellierung zu stopfen (zB Validierung) und View-Logik (zB $ this-> headScript() - warum sollte mein Controller sich darum kümmern, welche js-Datei meine Ansicht benötigt?) in Controller, könnte aber eine Frage der Nutzung sein und nicht der Fehler des Frameworks.

Jetzt für ein paar wirklich ernste (IMO) Schwächen habe ich in meiner kurzen Zeit damit erlebt. Ich schaudere, um mir die anderen Bereiche vorzustellen, die ich in der Zukunft entdecken werde, wenn ich weiter damit baue.

1. Formularlayout
Viele Menschen scheinen mit dem Mangel an Kontrolle über Formularlayout, unglücklich zu sein. Wie kann man einen populären Rahmen haben, in dem das Konstruieren eines einfachen Formulars so viele Diskussionen erfordert? Question 1 und question 2.

2. Authentifizierung/Autorisierung
Niemand scheint wirklich zu verstehen, wie einfach Routine Authentifizierung/Autorisierung durchzuführen. Menschen [einschließlich meiner] kämpfen mit der Implementierung einer einfachen Zugangskontrolle. Darüber hinaus scheint sich der Ansatz eher auf die Serialisierung für die Persistenz zu stützen als auf die herkömmliche Datenbankspeicherung von Benutzern und Berechtigungen. A confusing example, a proposal to enhance the facility, a tutorial - part I, and part II. Das ist zu viel Arbeit Jungs!

Sind meine wahrgenommenen Schwächen nicht real oder irgendwie kein Problem? Warum oder warum nicht? Warum hast du Zend Framework gewählt (oder nicht)? Gibt es andere Bereiche, die Sie als so schmerzhaft empfunden haben, dass Sie ZF für einen anderen Ansatz entmutigen möchten? Danke für Ihre Meinung.

Antwort

15

Einer der Hauptvorteile von ZF besteht darin, dass Sie beliebige Komponenten verwenden und sie mit minimalem Aufwand an Ihr eigenes Framework (oder ein Drittanbietersystem) anbinden können.

+1

+1. Als ich das erste Mal Zend Framework benutzte, war es nur Zend Lucene, nach dem ich suchte, also habe ich nur das verwendet. Das gab mir die Zuversicht, dass Zend praktikabel ist. Allerdings muss ich zugeben, dass ich fühle, dass es monströs ist, wenn es für jeden Aspekt der eigenen Anwendung verwendet wird. – namespaceform

+1

+1. Das war ein großer Grund für mich, etwas darüber zu erfahren. –

18

Weil sie auf der Marketing sind gut


Zend-Gründer Andi Gutmans und Zeev Suraski sind wichtige Beiträge zur PHP

Und sie haben eine der umfassendsten Rahmen für php.

Wenn Sie darüber nachdenken; es ist wie wenn man sagt:

„Unsere Sprache nicht so performant ist, wie es sein könnte, so haben wir einen Rahmen mit Caching, dass es schneller macht“

  • Das meiste, was Zend Angebot kann erfolgen ohne Zend.
  • Aber Zend's Paket ist eine sehr gute "All in One" -Distribution.
  • Sie bieten Zertifizierungen und Schulungen.
+1

-1 Nicht sehr konstruktiv! – Lizard

+2

Nun, das ist eine kurze Erklärung zu "Warum ist Zend Framework so beliebt?" – Roch

+2

+1 stimme ich zu. Es ist ein Marketing-Faktor beteiligt, das ist sicher –

2

Einfachheit, um mittelgroße Anwendungen zu bauen. Bis ZF mussten Sie Ihr eigenes "Framework" für mittelgroße Anwendungen erstellen. Jetzt ist es viel einfacher.

Ich glaube nicht, Entkopplung und einfache Elemente, die unabhängig voneinander verwendet werden können, ist der Schlüssel zum Erfolg. Ist eine nette Eigenschaft, aber ist nicht die regelmäßige Verwendung.

Unterstützung und Gemeinschaft siz e sind in der Balance mit anderen Frameworks relevant.

In Bezug auf die Geschwindigkeit sind sie nicht besser als andere Frameworks.

+0

Soweit Geschwindigkeit, beziehen Sie sich auf PHP-Frameworks, richtig? –

1

Ich habe mich nicht für Zend Framework entschieden, da es zu der Zeit, als ich PHP-Frameworks auswertete, keine vollständige und integrierte Lösung zum Erstellen von Web-Apps war. Ich entschied mich für symfony und seitdem hatte ich nie einen Bedarf, zu etwas anderem zu wechseln.

Ich bin mir nicht sicher, ob es heutzutage dasselbe ist, aber ich dachte immer an ZF als Komponentenbibliothek und nicht als Framework. Ein Framework hat etwas strengere Regeln, um Dinge zu tun, und es gibt oft bessere integrierte Support-Tools, um Menschen dabei zu helfen. Eine Komponentenbibliothek ist in dieser Hinsicht lockerer. Wenn die Rahmenregeln den Anforderungen der meisten Anwendungen in der Domäne des Frameworks entsprechen, bevorzuge ich diese Lösung eindeutig. Das war bei symfony der Fall für mich. Ich verwende bestimmte ZF-Komponenten nach Bedarf, aber nie meine Projekte auf ZF selbst.

+0

Dem stimme ich voll und ganz zu, ich komme von einem CakePHP/Rails-Hintergrund, und Sie müssen nur eine Menge Arbeit erledigen, um ein Formular da draußen zu bekommen, was nicht der schnellste Weg ist, eine Webapp zu bekommen. – Shiv

3

ZF ist ein guter Ausgangspunkt. Ich habe zend_tool verwendet, um ein MVC-Skelett meiner mittelgroßen Anwendung zu generieren und viele andere Komponenten (Zend_Cache, E-Mail, Übersetzung, Formulare, Sitzung) verwendet.

Und ich stimme zu, dass das Formularlayout kompliziert ist, wenn Sie versuchen, es zu tun, wie Zend sagt - mit Dekorateuren. Es gibt Möglichkeiten, nur Zend_Form-Elemente mit Validierung und in Ihrem benutzerdefinierten Layout zu verwenden - ohne Dekoratoren.

Ich hatte eine schlechte Erfahrung mit Zend Cookies - ich konnte einfach keinen Cookie für meine gesamte Domain setzen. Ein alter guter Setcookie hat es richtig gemacht.

Über Acl - wieder, Beispiele in Zend Dokumentation und Zend_Acl funktionieren manchmal nicht gut. Ich habe den Controller-Plugin-Ansatz und mein eigenes "rollenbasiertes Ressourcenmanagement" verwendet, um Berechtigungen zu steuern.

Ich habe nicht einmal versucht, Zend Data Gateway - Doctrine stattdessen verwendet (ich vermute, das ist, weil ich nHibernate :) :) Und Verbindung Doctrine war wirklich einfach.

Ich denke, ZF ist gut, weil Sie es verwenden können, wie Sie möchten. Ich denke, es wäre schwieriger mit einigen anderen Frameworks.

6

Formulare: Der Decorator Ansatz ist kompliziert, aber kugelsicher und unbezahlbar für Anwendungen mit vielen Formen. Es ist Ihnen egal, ob Sie 10 oder 25 Elemente in Ihrem Formular haben, der Stil ist immer derselbe. Spart Ihnen viel Arbeit, wenn Sie wissen, wie man es benutzt. Für Benutzer mit simplier Köpfen und Ziele gibt es immer die viewscript Dekorateur;)

Auth/Acl: hatte nie irgendwelche Probleme mit diesen.

Zend_Auth::getInstance()->hasIdentity() //logged in 

und

Zend_Auth::getInstance()->getIdentity()->role; //returns admin 

Für Acl:

$acl->isAllowed($who, $where, $what); 
$acl->isAllowed('roleAdmin', 'resourcePosts', 'create'); //returns true 

kann leicht modifiziert werden, MVC entsprechen:

$acl->isAllowed('roleAdmin', $module.ucfirst($controller), $action); //returns true 
$acl->isAllowed('roleAdmin', 'adminPosts', 'create'); //returns true 
+0

Vielleicht ist meine Meinung zu einfach für ZF ... Betreffend Auth/Acl: Kannst du auf ein einzelnes öffentliches Beispiel oder Tutorial zeigen, das [als herunterladbaren und ausführbaren Code] ausführlich beschreibt, wie man die aktuelle Version von Zend Framework benutzt (1.9, nein ") Vorschläge "oder" Labors "), um die Authentifizierung/Autorisierung von drei Benutzern/Passwörtern in drei verschiedenen Rollen (z. B. Gast, Mitglied, Administrator) zu verwalten, um drei verschiedene Controller im Standardmodul zu schützen? Dies wäre für Neuankömmlinge hilfreich. Wenn es irgendwo existiert, habe ich es nicht gefunden. – keithm

+0

Keine Kenntnis von. Aber ich komme mit den Manpages für Zend_Acl und Zend_Auth gut klar. Nur die einzige Frage - wo die ACL zu behandeln ist - verwenden Sie das Front-Controller-Plugin und die preDispatch-Methode. –

2

Wel, wir sind Entwickler, weil wir angeblich in der Lage sein, "einige" unserer eigenen Co zu schreiben de, nicht wahr? Frameworks sollten keine Assistenten sein, nur eine zusätzliche Hilfe.

1

Ich benutze ZF aus ein paar Gründen: Der Host von raffinierten Klassen, faulen Laden von Klassen, eigenständige Verwendung von Klassen und saubere Quelle sauber. Als ich es zum ersten Mal benutzte, musste ich ein ACL-System bauen - ein sehr großes komplexes. Zend_Acl hat enorm geholfen.

Ich denke, dass ZF an seinen Docs und Db-Klassen arbeiten muss. Die Probleme mit der db-Klasse haben viel mit PHP selbst zu tun. Vielleicht ist es etwas, in das Zend sich vertiefen möchte.

Das OP ist neu in PHP. Ich stimme zu, dass PHP seine Fehler hat, wie die willkürliche Benennung von Funktionen, aber im Allgemeinen macht es Sinn für HTTP und versteckt die Realität nicht vor dir.

0

Ich bin mir nicht sicher, ob ZF wirklich das populärste PHP-Framework ist. Ich habe es gewählt, nachdem ich es mit anderen Frameworks verglichen habe, die mehr "magisch" machen, weil sie alle schwer anzupassen waren.

Ich denke, ZF ist ein gutes objektorientiertes PHP MVC-Framework, aber ich stimme einigen ZF-Ansätzen nicht zu. Zum Beispiel verwende ich Zend_Form nur zum Filtern und Validieren von Daten. Alle HTML- und Präsentationsdateien werden in Ansichtsskripten erstellt. Das CSS ist verantwortlich für das Layout. Wenn wir die meiste Zeit Änderungen benötigen, reicht es nur das CSS zu ändern. Wenn ich das gleiche Formular auf vielen Seiten erscheinen lassen muss, verwende ich es als Teilansichtsskript.

Ich mag es nicht, einen Mapper für jedes Modell zu schreiben und eine Zend_Db_Table-Unterklasse für jede Datenbanktabelle zu erstellen. Stattdessen untersuche ich, wie man andere Muster für den Datenzugriff verwendet, oder vielleicht Doctrine.

Was ich an Zend_Acl nicht mag, ist, dass die ACL-Informationen in der ACL-Datei gespeichert werden. Ich möchte diese Informationen in der Datenbank speichern.

Das gute an diesem Framework ist, dass es leicht ist, die Dinge auf Ihre Art zu machen.

1

Formularlayout:

Es ist wirklich einfach. Dekorateure sind beim ersten Kontakt mit ihnen ein Schmerz im Hintern, sie sind nur schwarze Magie. Dann merkt man, wie nützlich sie sind und dass man fast alles mit ihnen machen kann. Wenn Sie schließlich einen Punkt erreicht haben, an dem Dekoratoren nicht mehr ausreichen, können Sie einfach separate Formularelemente in Ihrer Ansicht rendern oder sogar Ihr eigenes HTML-Formular schreiben. Betrachten Sie folgendes Beispiel:

Form

$text = new Zend_Form_Element_Text('text'); 
$text->addValidator('NotEmpty')->setRequired(); 
$submit = new Zend_Form_Element_Submit('submit'); 

Ansicht

<form> 
<input type="text" id="text" name="text" /> 
<input type="submit" id="submit" name="submit" value="Send" /> 
</form> 

Controller:

$form = new Form_Whatever(); 
if ($this->_request->isPost()) { 
    if ($form->isValid($this->_request->getPost()) { 
     // code 
    } 
} 

Dort gehen Sie. Sie haben ein Formular, Sie haben das HTML manuell geschrieben, aber Sie profitieren immer noch von der integrierten Validierung von ZF. Warum? Weil Sie immer noch das Formularobjekt im Controller erstellen und es über POST versenden. Du bekommst immer noch deine Filter, Validatoren, alles was du willst. Mit jedem beliebigen HTML-Code. Und Sie können auch eine externe Ansicht an das Formular anschließen, wenn Sie extrem gehen wollen :).

Oh, übrigens, wussten Sie, dass Ihre Formulare wiederverwendbar sind? Ja, du kannst ein Formular schreiben und es an mehreren Stellen verwenden. Kein Stress. Das gefällt mir persönlich an Formularen in ZF (und nicht an CodeIgniter - übrigens auch ein toller Rahmen).

Authentifizierung:

Zend Framework: Login password hash, email validator?

Ja, es ist nur ein kleines Stück Code. Du kopierst es einfach in deine Projekte.

Wie für ACL, erstellen Sie nur Ihre Regeln und überprüfen Sie sie dann, wann immer Sie sie brauchen. Ein Einliner. Kann nicht einfacher sein.

Persönlich denke ich, ZF ist beliebt, weil es einfach Ihr Geld spart. Wenn Sie mich vor ein Projekt stellen, kann ich Ihnen garantieren, dass ich es zweimal schneller fertigstellen werde, wenn Sie mir ZF anstelle eines anderen Rahmens, den ich kenne, zur Verfügung stellen. Und wahrscheinlich einen Bruchteil der Zeit, die ich in Baseline PHP alles machen müsste. Das ist es also: Zeit sparen = Geld sparen. Oder verdienen Sie zusätzliches Geld - aber eine der beiden Regeln, oder?

1

Es ist nicht notwendig, Zend_Form oder Decorators selbst zu verwenden. Sie können einfach HTML-Formulare verwenden und dann in Controller = Aktionen Zend_Filter_Input wie folgt verwenden. Du hast also das Beste aus beiden Welten.

public function indexAction() 
    { 
     $this->view->title = 'Search Results'; 

     $filters = array('q' => array('StringTrim' , 'StripTags')); 
     $validators = array('q' => array('presence' => 'required')); 

     $input = new Zend_Filter_Input($filters, $validators, $_GET); 

     if ($input->isValid()) { 
      $this->view->messages = ''; 
      $q = $input->getEscaped('q'); 
      $this->view->q = $q; 

      // do search 
      try { 
       $index = News_Search_Lucene::open(
        SearchIndexer::getIndexDirectory()); 

       $results = $index->find($q); 
      } catch (Exception $e) { 
       $results = array(); 
      } 

      $this->view->results = $results; 

     } else { 
      $this->view->messages = $input->getMessages(); 
     } 
    } 
5

Färben Sie mich UNIMPRESSED mit ZendFramework. Die Verwendung von Zend Framework ist wie das Verschweißen eines Satzes von Trainingsrädern mit Ihrem Code. Alles, was Sie in Zend Framework tun können, können Sie in PHP ausführen. (Denken Sie daran, dass ZF selbst in Roh-PHP geschrieben wurde.) Und Sie können dies normalerweise mit der gleichen Anzahl von Codezeilen tun - in einem konsistenten Stil mit dem Rest Ihrer Anwendung geschrieben. Durch die Verwendung von nativem PHP-Code sind Sie nicht an ein Nischenwerkzeug gebunden, das nur eine Minderheit von PHP-Entwicklern verwendet. Und Sie müssen sich keine Sorgen über die Kompatibilität mit Änderungen in ZF-Versionen machen.

In meiner Anwendungen, ich tun alle gleichen Dinge, dass die ZF-Tools zu tun, vor allem durch eine einfache PHP-Funktionen verwenden, die schon seit Jahren haben:

  • Validate Formulardaten
  • reinigen Formulareingabe
  • Griff Dateien über Formulare hochgeladen
  • manipulieren und Daten-Authentifizierung
  • senden emai
  • Griff vergleichen ls
  • Schreib in Protokolldateien
  • Dateien von der Konfiguration lesen
  • lesen externe HTTP-Seiten
  • Austausch in JSON und SOAP-Formate
  • Arbeit mit Drittanbieter-APIs

Ich kann nicht finde viel von allem in Zend Framework, das ist meine Zeit wert. Und lassen Sie mich nicht anfangen übertriebene "Scaffolding" -Frameworks wie CodeCoffin, AppShackler oder Ruby in Chains.

+0

Haha, +1 für die überragenden Gerüst-Frameworks :) –