Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

Ein Widget wird in brandbox genutzt um Eingabefelder sowie deren Anordnung innerhalb von Sets und Gruppen zu beschreiben. Diese Definitionen werden unter anderem von den nachfolgenden Komponenten als Basis für deren Aufgaben eingesetzt:

Ein Widget basiert entweder auf einer klassischen Widgetdefinition (widget.json) oder einer Strukturdefinition (structure.json). Mit der Strukturmodellierung (ehemals Datenmodellierung) können die Widgets auch auf Basis einer benutzerdefinierten Konfiguration definiert werden. Zudem kann über die Strukturmodellierung oder eine Modellierungsdefinition (modelling.json) eine klassische Widgetdefinition erweitert und verändert werden. Das nachfolgende Diagramm gibt Ihnen eine Übersicht über die Zusammenhänge und Abhängigkeiten der einzelnen Widgetbestandteile.

Drawio
bordertrue
diagramNameWidgetbestandteile
simpleViewerfalse
width
linksauto
tbstyletop
lboxtrue
revision3
diagramWidth1401

...

...

Was sind Identifikatoren?

...

Jedes Codepaket in brandbox kann eine Widget-, eine Modellierungs- und mehrere Strukturdefinitionen besitzen. Diese Definitionen werden in einer JSON-Datei abgelegt welche einem entsprechenden JSON-Schema folgen muss. Diese Schemata können auch in PHPStorm zur Validierung und Hilfestellung beim Erstellen dieser Dateien eingebunden werden.

Bestandteil

Dateiname

JSON-Schema

Widgetdefinition

<package root>/widget.json

plugin/remote/brandbox/framework/resources/widget-schema.json

Modellierungsdefinition

<package root>/modelling.json

plugin/remote/brandbox/framework/resources/modelling-schema.json

Strukturdefinition

<package root>/**/*.json

plugin/remote/brandbox/framework/resources/structure-schema.json

Wann benötige ich eine Widgetdefinition?

Sobald ein Codepaket in brandbox über Entities für Doctrine verfügt, muss eine widget.json für das entsprechende Paket erstellt werden um die Entity (Tabelle) sowie deren Eigenschaften (Eingabefelder) zu beschreiben und optional in Gruppen und Sets zu organisieren. Eine Eigenschaft muss nicht zwingend in der Widgetdefinition enthalten sein, die Entity selbst allerdings schon. Der Klassenname der erstellten Entity entspricht dem Tabellenidentifikator und die Namen der Eigenschaften den Eingabefeldidentifikatoren.

...

Eine Strukturdefinition wird genutzt um ein Widget ohne Tabellenbezug zu definieren. Mögliche Einsatzzwecke sind Formulare in Modals.

Codebeispiele

...

Wie rufe ich eine Widgetdefinition ab?
collapselanguage
Codeblock
languagetruephp
use Brandbox\Framework\Brandbox\Widget;

$definition = $this
	->staticController(Widget\Manager::class)
	->getRepositoryWidget('CustomEntityIdentifier')
;
Codeblock
phptitle


Wie rufe ich eine Strukturdefinition ab?
collapsetitle
Codeblock
languagetruephp
use Brandbox\Framework\Brandbox\Widget;

$definition = $this
	->staticController(Widget\Manager::class)
	->getDefinitionWidget('brandbox/custom-app/src/Custom/Package/Lib/Structure/CustomDefinition.json')
;
Codeblock
languagephp


Wie erstelle ich ein Formular aus einem Widget?
php
Codeblock
collapselanguagetruephp
use Brandbox\Framework\Component\Form;

$builder = $this
	->staticController(Form\Manager::class)
	->getStandardBuilder()
;

$builder->container = $definition;
$builder->prefix = 'CustomFormPrefix';
$builder->payloads = [
	'FieldIdentifierA' => 'Eingabefeldwert A'
];

$element = $this
	->staticController(Form\Manager::class)
	->getFrameworkForm($builder)
;
Codeblock
language
title


Wie validiere ich Werte mit einem Widget?
collapsecode
Codeblock
languagetruephp
use Brandbox\Framework\Brandbox\Validator;
use Brandbox\Framework\Brandbox\Http;

use Validator\Lib\Struct\AdvancedValidatorTrait; // Trait für die Klasse

$response = new Http\Response\AdvancedResponseStack();
$context = new Validator\Lib\Struct\ValidatorContext();

$context->container = $definition;
$context->response = $response;

$context->payloads = [
	'FieldIdentifierA' => 'Eingabefeldwert A'
];

if($this->validate($context)) {
	// Validierung erfolgreich
}
languagephp
title


Wie transformiere ich Werte mit einem Widget?
collapse
Codeblock
languagetruephp
use Brandbox\Framework\Brandbox\Validator;
use Brandbox\Framework\Brandbox\Casting;

$payloads = [
	'FieldIdentifierA' => 'Eingabefeldwert A'
];

$readable = $this
	->staticController(Casting\Manager::class)
	->getHumanReadable($definition, $payloads)
;

...