**Neueste stabile Version: [Version 3.1.0, veröffentlicht am 6. Juli 2017].
Die aktuellste stabile Version von Version 2 finden Sie im v2-Zweig.
Treten Sie uns bei Slack auf qcubed.slack.com bei. Holen Sie sich hier Ihre Einladung .
QCubed (ausgesprochen „Q“ – kubisch) ist ein PHP Model-View-Controller-Framework für die schnelle Anwendungsentwicklung mit Unterstützung für PHP5 (5.4 und höher) und PHP7. Das Ziel des Frameworks besteht darin, Entwicklungszeit bei alltäglichen, sich wiederholenden Aufgaben zu sparen – damit Sie sich auf Dinge konzentrieren können, die nützlich UND unterhaltsam sind. QCubed zeichnet sich in Situationen aus, in denen Sie über eine große Datenbankstruktur verfügen, die Sie den Benutzern schnell zur Verfügung stellen möchten.
Mit QCubed müssen Sie sich nicht mit POSTs und GETs herumschlagen, die vom Browser kommen. QCubed erledigt das automatisch für Sie und packt die Informationen in objektorientierte Formulare und Steuerelemente. Das Programmieren mit QCubed ähnelt stark dem Programmieren einer Desktop-Anwendung. Wenn Sie mit ASP vertraut sind, ist es ähnlich.
Der Codegenerator erstellt automatisch Objektklassen mit passenden Formularen und Steuerelementen basierend auf Ihrem Datenbankschema. Es nutzt das Konzept von ORM, der objektrelationalen Zuordnung, um praktisch Ihre gesamte Modellebene für Sie zu erstellen.
Codegen kann Fremdschlüsselbeziehungen und Feldeinschränkungen nutzen, um gebrauchsfertige Datenmodelle mit Validierungsroutinen und leistungsstarken CRUD-Methoden zu generieren, sodass Sie Objekte manipulieren können, anstatt ständig SQL-Abfragen auszugeben.
Weitere Informationen sowie Beispiele finden Sie online unter https://qcubed.eu/
Die Verwendung von QQueries ermöglicht ein einfaches, aber leistungsstarkes Laden von Modellen. Alle generierten ORM-Klassen verfügen über Query-Methoden und QQNodes. Durch die Verwendung dieser Methoden ist das Abrufen einer komplexen Teilmenge von Daten ziemlich einfach – und kann in fast jeder relationalen Datenbank verwendet werden.
QCubed verwendet das Konzept eines QForm, um den Formularstatus zwischen POST-Transaktionen beizubehalten. Ein QForm dient als Controller und kann QControls enthalten, bei denen es sich um UI-Komponenten handelt.
Alle QControls (einschließlich QForm selbst) können eine Vorlage verwenden, die die Ansichtsschicht darstellt und die MVC-Struktur vervollständigt.
QControls können den FormState von QForm nutzen, um sich über Ajax-Rückrufe genauso einfach zu aktualisieren wie synchrone Server-POSTs. Alle Kern-Widgets der jQuery-Benutzeroberfläche sind als QControls verfügbar.
Einige QControls umfassen:
Der einfachste Weg, QCubed zu erlernen, besteht darin, sich das Beispiel-Tutorial unter http://qcu.be/examples/ anzusehen.
Durch sein Plugin-System erleichtert QCubed das Paketieren und Bereitstellen von Verbesserungen und Ergänzungen der Kerncodebasis. Plugins für die aktuell aktive Version von QCubed befinden sich in Repositories, die mit „plugin“ beginnen.
Der Installationsvorgang wird hier ausführlich beschrieben: Installationsanleitung.
3.0 war eine wesentliche architektonische Änderung gegenüber 2.x. Sie sollten grundsätzlich von vorne beginnen, indem Sie ein neues Projekt erstellen, Ihre Modelle generieren, den ModelConnectorEditor verwenden, um zu verfeinern, was in den Connectors (früher MetaControls genannt) generiert wird, und dann den Code von Ihrer alten Version in die neue Version kopieren. Sie werden feststellen, dass viele der Dinge, die Sie manuell erledigen mussten, jetzt im generierten Code erledigt werden, sodass es möglicherweise nicht so lange dauert, wie Sie denken. Lasst uns hüpfen :-)
v3.1 verfügt jetzt über eine Änderungsverfolgung in den Modellen. Anstatt jedes Mal, wenn Sie ein Objekt speichern, ein gesamtes Objekt in die Datenbank zu übertragen, werden nur die Daten übertragen, die sich geändert haben. Zu diesem Zweck werden die Mitgliedsvariablen in der generierten Modellsuperklasse privat statt geschützt, was möglicherweise eine Änderung des Codes in Ihrer Modellunterklasse erforderlich macht. Um den Übergang zu erleichtern, ist die neue Funktion für private Variablen standardmäßig deaktiviert. Sie müssen es aktivieren, indem Sie die Datei codegen_settings.xml bearbeiten und dem Tag „createOptions“ den Parameter „privateColumnVars="true"“ hinzufügen. Ein Beispiel finden Sie in der Datei codegen_settings.xml im Verzeichnis qcubed/install/project/configuration.
Dadurch werden alle geschützten Spaltenvariablen in der Gen-Klasse privat, sodass Sie nicht direkt von Ihren Model-Unterklassen aus auf sie zugreifen können. Wenn Sie beispielsweise eine Spalte „Name“ in einer Tabelle haben, können Sie Folgendes tun:
$ strName = $ this -> Name ;
oder noch besser:
$ strName = $ this -> getName ();
aber nicht:
$ strName = $ this -> strName ;
$this->Name
leitet an $this->getName()
weiter
Stattdessen auch:
$ this -> strName = $ strName ;
Tun:
$ this -> setName ( $ strName );
oder
$ this -> Name = $ strName ;
Zu den Vorteilen der neuen Funktion gehören eine bessere Leistung, weniger OptimisticLocking-Ausnahmen und die Verhinderung, dass Sie versehentlich auf einen Wert zugreifen, der aufgrund einer QSelect-Klausel nicht geladen wurde. Außerdem kann QSelect jetzt verwendet werden, um zu steuern, was generiert wird, wenn Sie ein Objekt in andere Formate wie JSON konvertieren.
v4.0 ist eine weitere große architektonische Änderung, die die Standards PSR-1, PSR-2 und PSR-4 unterstützen soll. v4 fügt Namespaces zu allen Kern- und Bibliotheksdateien hinzu. Der Buchstabe „Q“ vor allen Kernklassen ist verschwunden, da dies im Wesentlichen unsere Art der Namensraumerstellung war, bevor Namensräume in PHP verfügbar waren.
Es enthält Tools, mit denen Sie die Änderung Ihres Codes von v3.x-Code auf v4.0 automatisieren können. Weitere Informationen finden Sie in der Readme-Datei im qcubed/application-Repository.
Eine Liste der neuesten Änderungen finden Sie unter https://github.com/qcubed/qcubed/commits/master
QCubed entstand aus QCodo, einem Projekt von Michael Ho. QCubed basiert auf JQuery und verwendet für einige seiner Kernsteuerelemente jQuery-UI-Bibliotheken.