Wenn ich eine Entity Extension schreibe, wofür ist der custom Struct welchen man mitgeben muss?
Ich verstehe noch nicht so ganz, warum man einen eigenen schreiben muss, was er annimmt, weiter gibt usw. und warum es nicht einfach so ausgeben wird wie es ankommt.
Kann mir da jemand auf die Sprünge helfen mit einer kurzen Erklärung für Dummies?
Sagen wir mal ich adde ein bool mit new BoolField - Wieso muss man dann noch ein Struct mitgeben und vor allem wie sieht der aus / was macht er genau. Also wie er aussieht kann ich mir anschauen - Es will aber noch nicht so ganz in meinen Kopf wofür überhaupt und wie man damit umgeht
das struct dient sozusagen als “datenhaltungsschicht”, mehr nicht.
für ein einfaches struct könnte zb so aussehen:
use Shopware\Core\Framework\Struct\Struct;
class CustomStruct extends Struct{
protected $isValid;
public function getIsValid(){
return $this->isValid;
}
public function setIsValid($value){
$this->isValid = $value;
}
}
die extension wird dann zb so mit leben gefüllt:
[...]
$meinCustomStruct = new CustomStruct();
$meinCustomStruct->setIsValid(true);
$product->addExtension('meinstruct', $meinCustomStruct);
wenn du dann dein product (oder was auch immer) dumpst, bekommst du etwas wie
@mediaciety Danke für deine Antwort. Was aber partout immer noch nicht in meinen Kopf will: Wofür und vor allem wie steht es in Verbindung mit deiner eigentlichen EntityDefinition / Datenbank Spalte?
IsValid wäre dann in deinen Beispiel die DB Spalte? Oder woher kommen die Daten / woher weiß er was wie behandelt werden muss.
Mir erschließt sich nur immer noch nicht ganz der Sinn dahinter. Dient es dazu die Daten nachdem man sie holt noch einmal anpassen zu können für die eigentliche Ausgabe?
was die datenbankanbindung dessen angeht, weiß ich genauso viel wie du
im moment nutze ich die extension nur, um bestimmte daten zu einem produkt, die sich durch user-eingaben ergeben, etwas geordneter durch den shop zu schleusen und sie nicht zwingend nochmal extra in die session schreiben zu müssen - vllt nicht besonders elegant, funktioniert aber.
isValid wäre in meinem fall eine einfache Variable, die ich „irgendwo“ zur laufzeit setze.
du kannst halt per getter und setter recht bequem auf die daten im struct-objekt zugreifen und musst dich nicht durch irgendwelche array-konstruktionen hangeln, auch wenn ein struct am ende vergleichbar mit einem assoziativen array ist.
Deine EntityDefinition beschreibt deine Datenbank, die Entity enthält die Daten aus der Datenbank.
Wenn du eine Entity erweitern möchtest, dann ist das einfachste über ein Custom Field, das du über den Admin pflegen kannst. Du musst das Feld nur einmal via Admin anlegen und an der Entity pflegen und Shopware liest die Daten automatisch mit aus.
Die Extensions sind dazu da, um weitere Daten an der Entity zu speichern, die du anderweitig bekommen und aufbereitet hast, z.B. du hängst im EntityLoaded-Event und liest da via Api zusätzliche Daten zu deiner Entity aus. Die kannst du dann via addExtension deiner Entity hinzufügen