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/ └─ {package-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/ │ | ├─ Migration/ | | ├─ Repository/ | | ├─ Request/ | | ├─ Structure/ | | └─ Subscriber/ | ├─ 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 |
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. |
/src/{PackageNamespace}/{PackageName}/structure.json | Strukturdefinitionen. Siehe Widget. |
/src/{PackageNamespace}/{PackageName}/modelling.json | Modellingdefinition. Siehe 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}/Lib/Exceptions/ | Ein zentraler Ort für alle Exceptions des Packages |
/src/{PackageNamespace}/{PackageName}/Lib/Migration/ | Migrationen. Siehe Migrate. |
Ressourcen | |
/resources/.phpstorm.meta.php/ | PhpStorm advanced metadata |
/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. |
/resources/dashboard-config.json | Eine Datei zur Erstellung eines Dashboards. Siehe 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
Doctrine
- Repositories sollen alle Queries enthalten, auch Querybuilder basierende Queries
- Indexe heißen so wie die Methode
- Neu: Entitäten um individuelle Properties anreichern
- Neu: php composer.phar update/install notwendig, da Entities in einm zentralen Ordner liegen (unter /plugin/dbal/brandbox-dbal/)
- Neu: Kopieren von Datensätzen (CopyManager)
- Neu: Löschen von Datensätzen (DeleteManager)
- 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
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