Übergang von einem Framework zu einem No-Framework [geschlossen]

89

Ich habe in PHP für ungefähr 8 Jahre als Hobby entwickelt. Im Jahr 2009 habe ich Codeigniter aufgenommen und seitdem habe ich es nicht geschafft, ein einziges Projekt zu entwickeln.

Ich finde, es verlangsamt mich beim Versuch, herauszufinden, wie ich es so ändern kann, dass es so funktioniert, wie ich es möchte. Wenn ich in reinem PHP arbeite, würde ich es wissen oder ich könnte schnell ein Snippet für finden.

Ich habe CodeIgniter, Kohana und Symfony ausprobiert. Ich mag die Benutzerfreundlichkeit (und ich habe auch angefangen, Doctrine als ORM zu verwenden, was meine Datenbankarbeit massiv beschleunigt hat), aber ich finde, dass Projekte 3-4-mal so viel Zeit in Anspruch nehmen wie in reinem PHP. Ich langweile mich und bin frustriert, wenn ich keine Lösung für ein Problem finde, das ich zuvor in reinem PHP gelöst habe.

Hat jemand von der Verwendung von Frameworks zu einem No-Framework-Ansatz zurückgekehrt? Gibt es so etwas wie ein grundlegendes Sicherheitsframework (XSS verhindern, gepostete Daten filtern, eine Reinigungsfunktion für die Verwendung mit Datenbanken bereitstellen)? Ich denke, so etwas würde mir viel mehr nützen als ein umfassender Rahmen. Ich denke, das Lernen, mit Frameworks zu arbeiten, hat mir viel beigebracht, aber ich würde gerne mit meinem eigenen Code arbeiten.

Alex C.
quelle
5
Ich würde gerne mehr darüber erfahren, warum Sie gesagt haben, dass die Verwendung von Framework 3-4-mal so lange dauert wie ohne Framework. Stört es Sie, mehr darüber zu erzählen?
Lukman
7
Einer der Vorteile von CI oder einem anderen Framework besteht darin, dass Sie zu Entwurfsmustern gezwungen werden, die für Entwickler, die nicht an Ihren speziellen Entwicklungsstil gewöhnt sind, einfacher beizubehalten sind. In größeren Umgebungen ist es außerdem wichtig, Ansichten von Logik zu trennen, damit Ihre CSS-Gurus ihre Arbeit erledigen können, ohne den Entwicklern auf die Zehen zu treten.
Kyle Noland
1
Gute Frage, wenn ich jemals eine Wahl habe, verwende ich reines PHP. Aber die meisten Leute, für die ich arbeite, möchten, dass ich ein Framework verwende, also berechne ich ihnen nur die zusätzlichen Stunden :) Ich denke, mein eigener Code ist lesbar, gut organisiert und stabil. Vielleicht befürchten sie, Sie an Bord behalten zu müssen, wenn eine Katastrophe eintritt und der gesamte Code sich in einem Zustand befindet, in dem sich "niemand anders als jeder andere lesen kann".
SSH Diesen

Antworten:

101

Aktuelle Versionen von PHP5 enthalten einen Großteil des Sicherheitsframeworks, das Sie als Teil der Standardbibliothek suchen.

Wenn Sie HTML als Eingabe akzeptieren, empfehle ich, HTML Purifier zu verwenden und es über eine FILTER_CALLBACK- Zeile in Ihrem filter_input_array-Setup aufzurufen. Der auf der Whitelist basierende Ansatz zur Eingabesicherheit ist eine hervorragende (und sehr leistungsstarke) erste Verteidigungslinie gegen XSS.

Soweit ich das beurteilen kann, verfügt PHP nicht über einen Mechanismus zum Schutz vor Fälschungen von standortübergreifenden Anfragen , aber ich bin sicher, dass Google Ihnen dabei helfen kann. Die OWASP-Sicherheits-Cheatsheets enthalten einen Abschnitt darüber, wenn Sie Ihren eigenen Schutz implementieren möchten.

Aus Neugier habe ich mich dazu entschlossen, auch eigenständige Komponenten zu untersuchen. Folgendes habe ich bisher gefunden:

Vorlage:

  • Vererbung von PHP-Vorlagen (reguläre Vererbung von PHP plus Vorlagen)
  • TWIG (Django / Jinja2 / Liquid- Syntax einschließlich Autoscape und Sandboxing. Kompiliert zu zwischengespeichertem PHP für Geschwindigkeit.)
  • Dwoo (Ein schnellerer, funktionsfähigerer, PHP5-ähnlicher Nachfolger von Smarty . Enthält ein Kompatibilitätssystem für vorhandene Smarty-Vorlagen.)

Sachen, die ich immer noch nicht richtig untersucht habe:

ssokolow
quelle
Vielen Dank, alle sehr guten Ratschläge und ich werde sie jetzt untersuchen!
Alex C
4
Tauschen Sie Smarty gegen Dwoo aus, wenn Sie einen Template-Motor benötigen. In Bezug auf die Funktionen ist es fast identisch mit Smarty, schmilzt jedoch nicht die CPUs.
Phil Sturgeon
pear.php.net/package/Net_URL_Mapper ist ein Routen-Dispatcher.
Cweiske
4
Wenn Frameworks Sie verlangsamen, vermeiden Sie das Templieren von Engines, insbesondere von Smarty, wie der Pest. Sie meinen es gut, aber sie schaffen nur eine neue und nicht intuitive Art, etwas zu tun, was PHP bereits tut.
Nachteule
Kommt darauf an, was Sie erreichen wollen und warum das Framework Sie nur verlangsamt.
ssokolow
10

Ich glaube nicht an Frameworks ... Ich habe in vielen von ihnen gearbeitet.

Gründe für den Hass auf MVC-Frameworks:

1) Code aufblähen, ich kaufe Premium-Klassen, die mich bei der Entwicklung unterstützen. Wie Formularklassen oder SQL-Klassen.

2) Ich glaube, dass MVC-Frameworks nicht einfach zu portieren sind, insbesondere wenn Abhängigkeitsmanager verwendet werden.

3) Ich glaube, dass Sie mit einem MVC-Framework tatsächlich mehr Code schreiben, als wenn Sie ein Boilerplate mit einer Menge nützlicher Klassen verwenden müssten, die die Authentifizierung usw. handhaben.

4) Die meisten Frameworks bieten auch nur eine oder zwei Datenbanken an.

Ich würde vorschlagen, ein Formular-Framework mit Authentifizierung und Texteditor und ein SQL-Framework wie madoo + eine E-Mail-Klasse zu finden ...

90% Ihrer Bewerbung besteht immer aus Formularen, SQL- und Ajax-Klassen - der Rest kann nur bei Bedarf erworben werden

Ich bin ein Minimalist und habe Probleme mit der Idee, Code in meiner Anwendung zu haben, der nichts bewirkt ... nur für den Fall, dass ich ihn brauche, funktioniert er bei mir nicht.

Jugger
quelle
Zur Aussage "Ich kaufe Premium-Klassen": Wo und zu welchen Zwecken kaufen Sie solche Klassen? Vielen Dank.
Dotancohen
Genau. Es gibt auch einen beachtlichen Leistungseinbruch mit vielen Frameworks.
Entwickler
8

Mit so viel Erfahrung müssen Sie Ihre eigenen Lieblingsbibliotheken haben, diese von Hand auswählen und Ihr eigenes einfaches Framework erstellen. Framework oder kein Framework (und welches dazu) hängt von der Art des Projekts ab, kein Handschuh passt für alle. Ich würde daher dringend empfehlen, dass Sie, wenn Sie das Gefühl haben, dass die vorhandenen Frameworks Sie verlangsamen, etwas Zeit damit verbringen und ein Framework entwickeln, das Ihren Anforderungen entspricht.

Sabeen Malik
quelle
8

Basierend auf Ihrer Aussage, dass Sie PHP als Hobby verwendet haben, sowie Ihrer Profilaussage "Langsam dorthin gelangen" scheint dies ein Problem der Lernkurve zu sein. Sie scheinen nicht über die Tiefe und Breite der Erfahrung zu verfügen, um a) zu verstehen, wie innerhalb der Struktur zu arbeiten ist, die das Framework auferlegt, und b) Sie können daher nicht von den Effizienzvorteilen profitieren, die das Framework ermöglicht.

Ich fordere Sie auf, dabei zu bleiben. Kehren Sie mit den Video-Tutorials zum Anfang zurück. Suchen und lesen Sie den Code anderer Personen, bis Sie ihn verstanden haben. Erstellen Sie Ihre Projekte von unten nach oben - starten Sie einfach und fügen Sie Funktionen hinzu. Folgen Sie den Foren und versuchen Sie, Fragen selbst zu beantworten, bevor Sie die Antworten lesen.

Ich programmiere seit fast 20 Jahren professionell auf verschiedenen Plattformen und es dauerte noch eine Weile, bis ich mich mit CI vertraut gemacht hatte. Aber jetzt, wo ich es bin, würde ich (für meine eigenen Projekte) nicht mehr auf reines PHP zurückgreifen, wenn ich nicht eine Website hätte, die so umfangreich ist, dass sie quantifizierbare Leistungsprobleme aufdeckt (denken Sie an Twitter).

coolgeek
quelle
Ich bin immer noch an der Grenze, ob ich auch Frameworks mag oder nicht. Ich verstehe definitiv den Punkt des OP, aber ich sehe auch Ihren ... das Erlernen eines Frameworks ist wie das Erlernen einer ganz neuen Sprache. Sie müssen sich in die Arbeitsweise des Frameworks einarbeiten. Eine andere Sache, mit der ich jedoch zu kämpfen habe, ist, wenn meine Philosophie, wie Dinge zu tun sind, sich von der des Rahmens unterscheidet. Ich versuche immer noch, eine zu finden, die zu mir passt. (Ich kann nicht auf .NET MVC3 warten)
mpen
Bis jetzt kenne ich keine anderen Frameworks, daher kann ich nicht allgemein sprechen. Die Verwendung eines Frameworks ist jedoch nicht alles oder nichts. Zum Beispiel finde ich die Caching-Bibliotheken (Seite, Datenbank) von CI unzureichend und nicht leicht skalierbar. Ich verwende also eine Cache-Bibliothek eines Drittanbieters (Phil Sturgeon's) und bin ziemlich zufrieden damit.
Coolgeek
Ein weiterer wesentlicher Vorteil des Festhaltens besteht darin, dass es relativ einfach ist, später andere Frameworks zu erlernen. Aus diesem Grund werden häufig Stellenangebote angezeigt, in denen ein bestimmtes Framework (z. B. CI) angegeben ist. Es wird jedoch angegeben, dass Erfahrungen mit ähnlichen Frameworks (z. B. Zend oder Symfony) berücksichtigt werden.
Coolgeek
2

Zend Framework ist dafür wirklich super. Sie können so viel oder so wenig verwenden, wie Sie möchten. Es ist alles in PHP und Open Source codiert, so dass Sie es einfach hacken und zu Ihrem eigenen machen können. Die verschiedenen Komponenten sind nicht so stark voneinander abhängig wie in anderen Frameworks.

Mit einigen Komponenten von Zend können Sie problemlos ein einfaches Framework erstellen.

Probieren Sie es aus!

Iznogood
quelle
3
Er versucht, sich von einem Rahmen zu entfernen.
WarmWaffles
1
@ Warme Waffeln. Deshalb habe ich über die Verwendung von Teilen von ZF gesprochen. Sicherlich erwarten Sie nicht, dass der Typ das Rad für alles neu erfindet.
Iznogood
2
Iznogood hat einen sehr guten Punkt. ZF ist mehr als nur ein Rahmen. Ich habe festgestellt, dass die Pakete für viele gängige Aufgaben äußerst nützlich sind, und nichts zwingt Sie dazu, ihre MVC-Muster oder ihre DB-Zugriffsmethoden oder wirklich alles zu verwenden. Natürlich können Sie auch einfach mit Pear-Modulen arbeiten.
Bob Baddeley
2
Es ist ja eine Bibliothek, die auch einen Rahmen hat. Er sucht jedoch nach etwas, das einfach zu bedienen ist, und als ich das letzte Mal nachgesehen habe, ist Zends Namespace überfüllt und es ist schwierig zu tippen. @ Bob_Baddeley PEAR ist ein guter Vorschlag
WarmWaffles
@WarmWaffles Nun, jeder für sich, denke ich. Vielleicht könnten Sie Zend bei 1.10.x jetzt noch einmal überprüfen und dann ganz anders sagen als 1.8.
Iznogood
2

Ich weiß genau, wie du dich fühlst. Ich habe vor 4 ~ 5 Jahren in PHP angefangen (ich kam aus Delphi, lol) und habe in reinem PHP angefangen. Was ich zurück hatte, war ein "CMS Panel like", das einfach alle Tabellenfelder las und das Formular erstellte. Nachdem ich irgendwann irgendwie mit PHP Frameworks vertraut war, versuchte ich es zuerst mit CakePHP und mochte es nicht, nachdem ich in Yii eingestiegen war, was meiner Meinung nach ziemlich intuitiv und einfach zu bedienen ist (mit seinem Gii-Generator rockt es ziemlich). Ich habe Symfony, ZF2, Laravel, Yii2-Beta und einige Frameworks für RAD ausprobiert, aber ich fühlte mich immer noch nicht schnell genug wie vor den Frameworks.

Es ist passiert, dass ich mein eigenes Framework entwickelt habe (es war natürlich nicht genau so, dass ich eines Tages aufgewacht bin und gesagt habe "Ich werde ein neues Framework erstellen", was mit der Zeit passiert ist). Ich weiß, dass es eine schlechte, schlechte, schlechte Praxis und eine "Rad-Neuerfindung" ist, ABER ich entwickle meine Projekte jetzt viel schneller (mehr als nur PHP).

Da es sich bei dem Code um eine vollständige MESS handelt, habe ich vor ungefähr einem Monat damit begonnen, mein Framework neu zu formulieren. Jetzt wird Composer verwendet, es werden allgemeine Regeln befolgt, die zwischen den PHP-Frameworks bestehen, und es handelt sich um MVC.

Warum formuliere ich neu? Denn wenn jemand ein Projekt von mir reparieren muss, wird es keine andere Welt sein.

Also verstehe ich dich.

Mein Rat ist, bereiten Sie Ihre Tools vor (nennen Sie es ein Framework, eine voreingestellte App oder wie auch immer die Leute es nennen) und verwenden Sie es so, wie Sie sich besser fühlen, aber befolgen Sie dennoch einige allgemeine Regeln (wie MVC, "einfach zu modulierende" Dinge, die Sie können im Falle eines Defekts ersetzen.

Ricardo Fiorani
quelle
1

Für die grundlegende Sicherheit verwende ich eine benutzerdefinierte Filtermethode, die meine Superglobalen einschließt . Die Syntax ist gewöhnungsbedürftig, aber einfacher als die PHP-API filter_var () und lässt Sie nicht die Bereinigung überspringen:

 $_GET->text("inputvar") or $_POST->name["field"]

Außerdem konnte inline $ _REQUEST-> sql () entkommen. Verwenden Sie für die Datenbankarbeit jedoch weiterhin parametrisiertes SQL oder das DAL / ORM Ihrer Wahl.

Mario
quelle
Das ist definitiv eine clevere Lösung, aber ich bin mir nicht sicher, warum Sie die Filter-API für umständlich halten. Wenn überhaupt, finde ich filter_input_array () ausgezeichnet. (In erster Linie, weil es einfach ist, alle Eingaben für einen bestimmten Anforderungstyp an einem Ort auf eine vernünftig deklarative Weise zu definieren. Unterschätzen Sie niemals den Nutzen dieser Art von Dingen.)
ssokolow
@ssokolow: In der Tat ist filter_input_array () geschickt, um es auf einen Schlag zu tun. Die filter_ * -Funktionen sind jedoch bereits zu flexibel, und zu viele Parameter passen nicht dazu. Deshalb denke ich, dass die Leute es meiden (obwohl es technisch eine gute Lösung ist).
Mario
Vielleicht. Ich denke, ein Teil des Problems ist, dass es nicht nur eine kürzliche Ankunft in einer Welt ist, in der viele Leute noch PHP4-Bücher in ihren Regalen haben, sondern auch zu wenig beworben wird, die offiziellen Dokumente nicht klar genug sind und die W3Schools-Dokumente die dazu neigen, Googles Top-Ergebnisse zu teilen, sind nicht umfassend genug.
ssokolow
1

Ich habe eintägig ToroPHP studiert und fand es ganz nett. Es ist ein minimalistisches Framework, das auf RESTful-Anwendungen ausgerichtet ist. Dies ermöglicht es, den serverseitigen Code modular zu halten, ohne sich mit dem Aufblähen eines Frameworks befassen zu müssen.

Kinjal Dixit
quelle
1

Ich weiß nicht, was Sie beunruhigt, aber Codeigniter ist ein großartiges Framework. Es hat eine schöne Dokumentation und da viele Leute Codeigniter verwenden, finden Sie die ganze Hilfe in der Dokumentation, im Forum oder im Stackoverflow. Ich habe an vielen Frameworks gearbeitet ( Codeigniter, CakePHP, Zend, Spring 3.0, Ruby on Rails), aber ich muss sagen, Codeigniter hat die beste Dokumentation. Es gibt viele Dinge im Codeigiter, die automatisch behandelt werden und Sie müssen sich keine Sorgen um die Sicherheit machen. Die Arbeit an Kern-PHP ist wie die Neuerfindung des Rades. Nun, das Wichtigste ist, dass der Wechsel von einem Kern zu einem Framework viel Mühe erfordert, sobald Sie sich daran gewöhnt haben. Sie werden es lieben. Auch Ruby on Rails ist auch ein großartiges Framework, wenn Sie wissen, welche Vor- und Nachteile Sie haben doppelte Geschwindigkeit haben.

Sachin Prasad
quelle
2
Es ist etwas mehr als zwei Jahre her, seit ich dies gepostet habe und tatsächlich eine Weile mit reinem PHP gearbeitet habe, aber seitdem wieder auf PHP umgestiegen bin - Sie haben genau Recht, es ist unglaublich einfach zu bedienen. Mein derzeit bevorzugtes Setup ist CI, phpActiveRecord für Datenbanken und Twig für Vorlagen.
Alex C
Ja, phpActiveRecord sieht gut aus. Haben Sie schon einmal Laravel ausprobiert? ( laravel.com ) Ich denke, Sie werden feststellen, dass standardmäßig das Beste aus CI, phpActiveRecord und Twig integriert ist. Ich war selbst CakePHP-Entwickler, habe mir aber in letzter Zeit Laravel genau angesehen.
Simon East