Versionen im Vergleich

Schlüssel

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

...

Codeblock
languagephp
<?php
  
  namespace brandbox\pluginType\pluginName\lib\request {
    
    use brandbox\admin\plugin;
    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)
          ->to(pluginName\lib\map\vcard::class)
        ;
      }
      
    }
    
  }

?>

Folgende Methoden wurden in diesem Beispiel genutzt:

Methode

Beschreibung

mapBuilderInterface::from($input, $multiple = false)

Legt die Datenquelle fest. Dies kann entweder ein instantiiertes Objekt oder ein Array sein. Wird zusätzlich der Parameter $multiple auf true gesetzt wird als $input ein Array mit Objekten oder Arrays erwartet.

mapBuilderInterface::to($output)

Führt das Mapping auf Basis der festgelegten Informationen durch und gibt das resultierende Objekt, welches über den Parameter $output festgelegt wurde, zurück. Ist der Parameter $multiple im Aufruf von mapBuilderInterface::from($input, $multiple) auf true gesetzt worden, wird ein Array mit den resultierenden Objekten zurückgegeben.

Mapping auf Entities

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.

...

In alle Mapping-Vorgänge kann auf verschiedenste Weise eingegriffen werden. Die folgenden Methoden stehen hierfür zur Verfügung und können vor dem Aufruf von mapBuilderInterface::to($output) eingesetzt werden.

Methode

Beschreibung

mapBuilderInterface::withMap($map, $withSource = false)

Setzt die Mapping-Klasse für den aktuellen Mapping-Vorgang. Hier kann entweder ein Klassenname oder ein instantiiertes Objekt angegeben werden. Mapping-Klassen müssen das o.g. mapInterface implementieren und generische oder spezifische Mapping-Methoden bereitstellen.

$withSource kann verwendet werden um in der Mapping-Methode nicht die Property rein gereicht zu bekommen sondern das gesamte Quellobjekt.

mapBuilderInterface::withPropertyMap($target, $source)

Zwischen Quelle und Ziel können sich die Property-Namen unterscheiden, obwohl die gleichen Daten enthalten sein sollen. Hierfür kann diese Methode genutzt werden. Der Parameter $target gibt den Property-Namen im Zielobjekt an und der Parameter $source den Property-Namen im Quellobjekt.

Beispiel
Codeblock
languagephp
themeRDarktitleBeispielcollapsetrue
<?php
  
  namespace brandbox\pluginType\pluginName\lib\request {
    
    use brandbox\admin\plugin;
    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)
		  ->withPropertyMap('vcardPersonID', 'id')
          ->to(pluginName\lib\map\vcard::class)
        ;
      }
      
    }
    
  }

?>


mapBuilderInterface::withStaticMap($target, $value)

Mithilfe dieser Methode können statische Werte in bestimmte Properties im Zielobjekt eingefügt werden. Hierbei wird das eigentliche Mapping umgangen und der angegebene Wert genutzt.

mapBuilderInterface::withCallableMap($target, $callable, $source = null)

Mithilfe dieser Methode kann für eine bestimmte Property Code außerhalb der Mapping-Klasse aufgerufen werden. Auch kann hier, wie bei mapBuilderInterface::withPropertyMap($target, $source) der Property-Name im Quell- und Zielobjekt gemapped werden.

Beispiel
Codeblock
languagephp
themeRDarktitleBeispielcollapsetrue
<?php
  
  namespace brandbox\pluginType\pluginName\lib\request {
    
    use brandbox\admin\plugin;
    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)
		  ->withCallableMap('homepage', [$this, 'callableMapHomepage'], 'id')
          ->to(pluginName\lib\map\vcard::class)
        ;
      }

      /**
       * @param int $id
       *
       * @return string
       */
      public function callableMapHomepage($id) {
        
        return '/person?id='.$id;
      }

   }
    
  }

?>


Eigene Mapping-Klassen nutzen

...