Versionen im Vergleich

Schlüssel

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

...

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
languagephp
themeRDark
<?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
languagephpthemeRDark
<?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
languagephpthemeRDark
<?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;
      }

    }

  }

?>

...