Eine App erstellen
Struktur
Das App folgt einer Reihe von Konventionen, die dabei helfen, den Code zwischen allen brandbox Apps konsistent zu halten. Siehe Namenskonventionen der Apps.
brandbox/
└─ {app-name}/
│
├─ resources/
│ ├─ .phpstorm.meta.php/
│ ├─ data.conf/
│ ├─ languages/
│ │ ├─ de.xml
│ │ └─ en.xml
│ ├─ js/
│ ├─ dashboard.json
│ └─ dashboard-config.json
│
├─ src/ (PSR-4)
| └─ {PackageNamespace}/
| └─ {PackageName}/
| ├─ Lib/
| | ├─ Entity/
| | ├─ Event/
| | ├─ Exceptions/
| | ├─ Execute/
| | ├─ Listener/
| | | └─ {PackageOfEvent}/
| | | └─ EventListener.php
│ | ├─ Migration/
| | ├─ Repository/
| | ├─ Request/
| | ├─ Structure/
| | └─ Subscriber/
| | └─ {PackageOfEvent}Subscriber.php
| ├─ config.json
| ├─ crud.json
| ├─ modelling.json
| ├─ structure.json
| ├─ widget.json
| └─ *Manager.php
| └─ Engine.php
│
├─ test/ (PSR-4)
│ ├─ Cases/
│ ├─ Resources/
│ └─ phpunit.xml.dist
│
└─ composer.json
Konventionen, die bei der Erstellung von Apps gelten, finden Sie hier.
Aufbau
Ordner | Inhalt |
---|---|
Controller und Routing | |
/src/{PackageNamespace}/{PackageName}/Lib/Engine.php | Basis-Controller. Siehe Controller und Routing. |
/src/{PackageNamespace}/{PackageName}/Lib/*Manager.php | Basis-Controller. Siehe Controller und Routing. |
/src/{PackageNamespace}/{PackageName}/Lib/Execute/ | Auszuführender Code, der statusändernden Character hat. Siehe Controller und Routing |
/src/{PackageNamespace}/{PackageName}/Lib/Request/ | Auszuführender Code, der Inhalte an einen Endpunkt ausgibt. Siehe Controller und Routing |
Doctrine | |
/src/{PackageNamespace}/{PackageName}/Lib/Entity/ | Doctrine-Entities. Siehe Entitäten um individuelle Properties anreichern |
/src/{PackageNamespace}/{PackageName}/Lib/Repository/ | Doctrine-Repositories |
/src/{PackageNamespace}/{PackageName}/Lib/Query/ | Queries. Siehe Query |
/src/{PackageNamespace}/{PackageName}/Lib/Dto/ | Dtos. Siehe Query |
Crud | |
/src/{PackageNamespace}/{PackageName}/crud.json | Definition von geführten Aktionen zum Löschen/Kopieren. Siehe Crud. |
Modelling | |
/src/{PackageNamespace}/{PackageName}/widget.json | Definition vorhandener Datenbanktabellen (Entities) sowie die Beziehung zwischen Datenbanktabellen. Siehe Widget (Component/Widget). |
/src/{PackageNamespace}/{PackageName}/structure.json | Strukturdefinitionen. Siehe Widget (Component/Widget). |
/src/{PackageNamespace}/{PackageName}/modelling.json | Modellingdefinition. Siehe Widget (Component/Widget). |
PSR-14 / Events | |
/src/{PackageNamespace}/{PackageName}/Lib/Event/ | Events, die von \Symfony\Contracts\EventDispatcher\Event ableiten (siehe Event). |
/src/{PackageNamespace}/{PackageName}/Lib/Listener/ | Listener enthalten in brandbox den auszuführenden Code. Sie werden von den Subscribern aufgerufen und ausgeführt. |
/src/{PackageNamespace}/{PackageName}/Lib/Subscriber/ | Subscriber, die von \Symfony\Component\EventDispatcher\EventSubscriberInterface ableiten. |
Allgemeines | |
/src/{PackageNamespace}/{PackageName}/config.json | Ermöglicht individuelle Konfigurationen für das Package. Hier wird auch der FriendlyName gepflegt. |
/src/{PackageNamespace}/{PackageName}/Lib/Exceptions/ | Ein zentraler Ort für alle Exceptions des Packages |
/src/{PackageNamespace}/{PackageName}/Lib/Migration/ | Migrationen. Siehe Migrate. |
/src/{PackageNamespace}/{PackageName}/js/ | Javascript-Code der sich auf dieses Package bezieht |
Ressourcen | |
/resources/.phpstorm.meta.php/ | |
/resources/data.conf/ | XSLT-Datein zur Verwendung bei Ex- und Import-Transformationen. Siehe Transformationen. |
/resources/languages/ | Zwei Dateien, die immer existieren müssen: de.xml und en.xml. Siehe Übersetzungen (i18n). |
/resources/js/ | Javascript-Dateien der App. |
/resources/dashboard.json | Eine Datei zur Strukturierung eines Dashboards. Siehe Dashboard (Base/Dashboard). |
/resources/dashboard-config.json | Eine Datei zur Erstellung eines Dashboards. Siehe Dashboard (Base/Dashboard). |
Worauf ist zu achten? Besondere Hinweise.
App und Packages
Der Name einer App folgt einer Namenskonvention, siehe Namenskonventionen der Apps
Es gibt in jeder App das Main-Package. Darin enthalten sind RoleSchemes und Suggestions
Der Name eines Packages setzt sich aus dem
Namespace
und demName
zusammen. In dieser Kombination darf ein Package nur ein Mal in der Installation vorkommen.Dashboard, Übersetzungen und Javascript-Dateien liegen zentral im Ordner /resources/
Es gelten PSR Coding Standards
Es gelten Coding conventions
Controller
Es gibt MainController und SubController (Controller\ControllerRequestAbstract oder Controller\ControllerExecuteAbstract)
Controller sind immer frei Logik zu halten, siehe auch MainController (Engine, Manager und Subscriber)
MainController repräsentieren die API – Auf SubController darf nur innerhalb des Packages zugegegriffen werden
Routing
Achtung bei Groß- und Kleinschreibung
Slashbasierte Syntax beachten
Installation
Es gibt Migrationsmöglichkeiten
Es gibt Events die bei der Installation greifen
Doctrine
Repositories sollen alle Queries enthalten, auch Querybuilder basierende Queries
Indexe heißen so wie die Methode
Neu: php composer.phar update/install notwendig, da Entities in einm zentralen Ordner liegen (unter /plugin/dbal/brandbox-dbal/)
Neu: Crud
Modelling
modelling.json kann genutzt werden, um Fremde Entities anzureichern (ODM-like oder in Verbindung mit Doctrine: Entitäten um individuelle Properties anreichern)
Das ist eine gute Möglichkeit, um Aspekte passiv und konsequent zu trennen
structure.json und widget.json, siehe Widget (Component/Widget)
PSR-14 / Events
PSR-14 ist ein Standard mit dem Ziel eine gemeinsame Schnittstellen zum Verteilen und Behandeln von Ereignissen zu ermöglichen. Bibliotheken sollen erstellt werden können, die mit vielen Apps / Paketen auf gemeinsame Weise interagieren können
Event-Ordner folgen einer Konvention
/Event
/Listener/{PackageName}/
/Subscriber/{PackageName}Subscriber.php
Events und Subscriber dürfen, wie MainController, keine Logik enthalten
Listener entsprechen organisatorisch SubControllern und dürfen demnach auch Controller\ControllerRequestAbstract oder Controller\ControllerExecuteAbstract erweitern