...
Die Mapping-Klasse mapEntity
hingegen wird genutzt um Doctrine-Entities zu befüllen. Sie nimmt rudimentäre Transformationen an den Daten vor, damit die Integrität des zu befüllenden Entities erhalten bleibt.
...
Muss von einem Array oder Objekt auf ein Datenbank-Entity gemapped werden, so sollte die Mapping-Klasse \brandbox\component\mapping\lib\map\mapEntity
genutzt werden. Die wird mithilfe der Methode mapBuilderInterface::withMap($map)
festgelegt.
Codeblock | ||||
---|---|---|---|---|
| ||||
<?php namespace brandbox\pluginType\pluginName\lib\request { use brandbox\admin\plugin; use brandbox\component\mapping; use brandbox\pluginType\pluginName; class vcard extends plugin\lib\requestAbstract { /** * @param pluginName\lib\entity\pluginNamePerson $person * * @return pluginName\lib\map\vcard */ public function getByEntity($person) { return $this ->map() ->from($person) ->withMap(mapping\lib\map\mapEntity::class) ->to(pluginName\lib\map\vcard::class) ; } } } ?> |
...
Mit der Mapping-Klasse \brandbox\component\mapping\lib\map\mapEntityAdvanced
können nur bestimmte Doctrine-Entity-Properties übertragen werden. Diese lassen sich über eine Black- oder Whitelist einstellen. Sollte Black- bzw. Whitelist erhält man unter anderem durch die Formular-Komponente.
Codeblock | ||||
---|---|---|---|---|
| ||||
<?php namespace brandbox\pluginType\pluginName\lib\execute { use brandbox\admin\plugin; use brandbox\component\form; use brandbox\component\mapping; use brandbox\pluginType\pluginName; class vcard extends plugin\lib\executeAbstract { /** * @param array $params * * @return void */ public function save($params) { // Ziel-Entity abrufen $person = $this ->getRepository(pluginName\lib\entity\person::class) ->getEntity(0) ; // Black- und Whitelist abrufen $engine = $this->getAppFactory(form\engine::class); $whitelist = $engine->getListedColumnsByEntity($person, '[Formularidentifikator]', $engine::LIST_TYPE_WHITELIST); $blacklist = $engine->getListedColumnsByEntity($person, '[Formularidentifikator]', $engine::LIST_TYPE_BLACKLIST); // Diese Mapping-Klasse muss vorher initialisiert werden $map = mapping\lib\map\mapEntityAdvanced::get($whitelist, $blacklist); $this ->map() ->from($params) ->withMap($map) ->to($person) ; } } } ?> |
...
Sollten die bereitgestellten Mapping-Klassen und die Zusatzfunktionen nicht ausreichend sein oder wird ein bestimmtes Mapping-Verhalten mehrfach benötigt, kann es sinnvoll sein eine eigene Mapping-Klasse zu definieren. In den meisten Fällen kann als Grundlage einer eigenen Mapping-Klasse von \brandbox\component\mapping\lib\map\mapGeneric
oder \brandbox\component\mapping\lib\map\mapAbstract
abgeleitet werden. Zwingend notwendig ist jedoch die Implementation des Interface \brandbox\component\mapping\lib\map\mapInterface
. Die eigene Mapping-Klasse kann in einem Mapping-Vorgang mithilfe der Methode mapBuilderInterface::withMap($map)
gesetzt werden.
Codeblock | ||||
---|---|---|---|---|
| ||||
<?php namespace brandbox\pluginType\pluginName\lib\map { use brandbox\component\mapping; /** * @author Dominik Hisler <hisler@konmedia.com> */ class myCustomMap extends mapping\lib\map\mapGeneric { /** * @param string $value * * @return string */ public function getSomeTargetPropertyName($value) { return 'someTransformation'.$value; } } } ?> |
...