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

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/

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 (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 dem Name 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

Modelling 

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