Beziehungs Ei Fields

CMS

Wie im Artikel Beziehungen im Bereich Persistence / ORM erklärt, können Entities über OneToOne-, ManyToOne-, OneToMany- und ManyToMany-Eigenschaften miteinander in Beziehung stehen. Beziehungs Ei Fields können solchen Eigenschaften zugewiesen werden und bieten dem Rocket-Nutzer ein einfaches Interface, um Beziehungen zwischen Einträgen zu verwalten. Ausserdem intergrieren sie sich in den Filter und können als Kriterien für Berechtigungen verwendet werden.

  1. ManyToOneSelectEiField
  2. OneToManySelectEiField
  3. ManyToManySelectEiField
  4. Target Removal Strategy

ManyToOneSelectEiField

Ein ManyToOneSelectEiField kann ManyToOne-Eigenschaften zugewiesen werden. Im Edit-Modus ermöglicht dieses Ei Field dem Rocket-Nutzer einen Eintrag der Gegenseite auszuwählen. Im Anzeige-Modus wird der jeweilige Eintrag der Gegenseite verlinkt.

Beispiel

                "blogCategory": {
                    "class": "rocket\\spec\\ei\\component\\field\\impl\\relation\\ManyToOneSelectEiField",
                    "props": {
                        "targetRemovalStrategy": "unset"
                    },
                    "label": "Blog Category",
                    "objectProperty": "blogCategory",
                    "entityProperty": "blogCategory"
                }

Props

Name Typ Bedeutung
displayInOverview boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Übersicht angezeigt.
displayInDetailView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Detailansicht angezeigt.
displayInEditView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Editansicht angezeigt.
displayInAddView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Addansicht angezeigt.
constant boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer das Feld nur beim Hinzufügen eines Eintrags bearbeiten.
readOnly boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer dieses Feld nicht bearbeiten.
min int  / optional

Die Anzahl Einträge, die der Rocket-Nutzer im Edit-Modus mindestens auswählen muss.

max int  / optional Die Anzahl Einträge, die der Rocket-Nutzer im Edit-Modus maximal auswählen kann.
draftable boolean  / optional / Standard: true Wenn true, dann kann dieses Feld in Drafts verwendet werden.
targetEiMaskId string  / optional

Die Ei Mask, die angewendet werden soll, wenn der Rocket-Nutzer Einträge der Gegenseite über dieses Ei Field anzeigt oder bearbeitet. Diese Ei Mask muss für die Ei Spec der Gegenseite definiert sein. Im oben stehenden Beispiel müsstest du eine solche Ei Mask also für die Ei Spec der Entity BlogArticle definieren.

filtered boolean / optional / Standard: true Wenn false, dann stehen dem Rocket-Nutzer beim Editieren alle Einträge der Gegenseite zur Auswahl, ungeachtet irgendwelcher Restriktionen (nicht empfohlen).
embeddedAddEnabled boolean / optional / Standard: false

Wenn true, dann bietet dieses Ei Field im Edit-Modus dem Rocket-Nutzer zusätzlich ein Formular an, über dieses er einen neuen Eintrag der Gegenseite erfassen kann. Damit du dieses Feature verwenden kannst, muss für die jeweilige Entity-Eigenschaft der Cascade Type PERSIST aktiv sein.

    private static function _annos(AnnoInit $ai) {
        $ai->p('blogCategory', new AnnoManyToOne(BlogCategory::getClass(), CascadeType::PERSIST));
    }
targetRemovalStrategy string / optional / Standard: "prevent" Wird im Abschnitt Target Removal Strategy erklärt.

OneToManySelectEiField

Ein OneToManySelectEiField kann OneToMany-Eigenschaften zugewiesen werden. Im Edit-Modus ermöglicht dieses Ei Field dem Rocket-Nutzer Einträge der Gegenseite auszuwählen. Im Anzeige-Modus werden die jeweiligen Einträge der Gegenseite verlinkt.

Beispiel

                "blogArticles": {
                    "class": "rocket\\spec\\ei\\component\\field\\impl\\relation\\OneToManySelectEiField",
                    "props": {
                        "displayInEditView": false,
                        "displayInAddView": false,
                        "readOnly": true
                    },
                    "label": "Blog Articles",
                    "objectProperty": "blogArticles",
                    "entityProperty": "blogArticles"
                }

Props

Name Typ Bedeutung
displayInOverview boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Übersicht angezeigt.
displayInDetailView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Detailansicht angezeigt.
displayInEditView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Editansicht angezeigt.
displayInAddView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Addansicht angezeigt.
constant boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer das Feld nur beim Hinzufügen eines Eintrags bearbeiten.
readOnly boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer dieses Feld nicht bearbeiten.
mandatory boolean  / optional / Standard: true

Wenn true, dann ist dieses Feld obligatorisch.

draftable boolean  / optional / Standard: true Wenn true, dann kann dieses Feld in Drafts verwendet werden.
targetEiMaskId string  / optional

Die Ei Mask, die angewendet werden soll, wenn der Rocket-Nutzer Einträge der Gegenseite über dieses Ei Field anzeigt oder bearbeitet. Diese Ei Mask muss für die Ei Spec der Gegenseite definiert sein. Im oben stehenden Beispiel müsstest du eine solche Ei Mask also für die Ei Spec der Entity BlogCategory definieren.

filtered boolean / optional / Standard: true Wenn false, dann stehen dem Rocket-Nutzer beim Editieren alle Einträge der Gegenseite zur Auswahl, ungeachtet irgendwelcher Restriktionen (nicht empfohlen).
embeddedAddEnabled boolean / optional / Standard: false

Wenn true, dann bietet dieses Ei Field im Edit-Modus dem Rocket-Nutzer zusätzlich ein Formular an, über dieses er einen neuen Eintrag der Gegenseite erfassen kann. Damit du dieses Feature verwenden kannst, muss für die jeweilige Entity-Eigenschaft der Cascade Type PERSIST aktiv sein.

    private static function _annos(AnnoInit $ai) {
        $ai->p('blogArticles', new AnnoOneToMany(BlogArticle::getClass(), 'blogCategory', CascadeType::PERSIST));
    }
targetRemovalStrategy string / optional / Standard: "prevent" Nur für "Owner"-Eigenschaften. Wird im Abschnitt Target Removal Strategy erklärt.

ManyToManySelectEiField

Ein ManyToManySelectEiField kann ManyToMany-Eigenschaften zugewiesen werden. Im Edit-Modus ermöglicht dieses Ei Field dem Rocket-Nutzer Einträge der Gegenseite auszuwählen. Im Anzeige-Modus werden die jeweiligen Einträge der Gegenseite verlinkt.

Beispiel

                "blogTags": {
                    "class": "rocket\\spec\\ei\\component\\field\\impl\\relation\\ManyToManySelectEiField",
                    "props": {
                        "targetRemovalStrategy": "unset",
                        "embeddedAddEnabled": true
                    },
                    "label": "Blog Tags",
                    "objectProperty": "blogTags",
                    "entityProperty": "blogTags"
                }

Props

Name Typ Bedeutung
displayInOverview boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Übersicht angezeigt.
displayInDetailView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Detailansicht angezeigt.
displayInEditView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Editansicht angezeigt.
displayInAddView boolean / optional / Standard: true Wenn true, dann wird dieses Feld standardmässig in der Addansicht angezeigt.
constant boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer das Feld nur beim Hinzufügen eines Eintrags bearbeiten.
readOnly boolean / optional / Standard: false Wenn true, dann kann der Rocket-Nutzer dieses Feld nicht bearbeiten.
mandatory boolean  / optional / Standard: true

Wenn true, dann ist dieses Feld obligatorisch.

draftable boolean  / optional / Standard: true Wenn true, dann kann dieses Feld in Drafts verwendet werden.
targetEiMaskId string  / optional

Die Ei Mask, die angewendet werden soll, wenn der Rocket-Nutzer Einträge der Gegenseite über dieses Ei Field anzeigt oder bearbeitet. Diese Ei Mask muss für die Ei Spec der Gegenseite definiert sein. Im oben stehenden Beispiel müsstest du eine solche Ei Mask also für die Ei Spec der Entity BlogCategory definieren.

filtered boolean / optional / Standard: true Wenn false, dann stehen dem Rocket-Nutzer beim Editieren alle Einträge der Gegenseite zur Auswahl, ungeachtet irgendwelcher Restriktionen (nicht empfohlen).
embeddedAddEnabled boolean / optional / Standard: false

Wenn true, dann bietet dieses Ei Field im Edit-Modus dem Rocket-Nutzer zusätzlich ein Formular an, über dieses er einen neuen Eintrag der Gegenseite erfassen kann. Damit du dieses Feature verwenden kannst, muss für die jeweilige Entity-Eigenschaft der Cascade Type PERSIST aktiv sein.

    private static function _annos(AnnoInit $ai) {
        $ai->p('blogArticles', new AnnoOneToMany(BlogArticle::getClass(), 'blogCategory', CascadeType::PERSIST));
    }
targetRemovalStrategy string / optional / Standard: "prevent" Nur für "Owner"-Eigenschaften. Wird im Abschnitt Target Removal Strategy erklärt.

Target Removal Strategy

Du kannst für alle oben beschriebenen Ei Fields über die JSON-Eigenschaft targetRemovalStrategy eine Target Removal Strategy bestimmen. Allerdings steht diese Option zur Verfügung, wenn das Ei Field einer "Owner"-Eigenschaft zugewiesen wurden. Die Target Removal Strategy bestimmt, was passieren soll, wenn Einträge der Gegenseite gelöscht werden.

Angenommen du hast verschiedene Artikel einer bestimmten Kategorie zugewiesen. Wird diese Kategorie nun gelöscht, bestimmt die Target Removal Strategy was mit diesen Artikeln passieren soll. Folgende Werte können für diese JSON-Eigenschaft gewählt werden:

Wert Bedeutung
"prevent" Das Löschen der Kategorie wird verhindert. Dem Rocket-Nutzer wird eine Fehlermeldung angezeigt.
"unset"

Die Beziehung wird aufgehoben und die jeweilige Kategorie von der Eigenschaft der Artikel entfernt.

Bei ToOne-EiFields erhält die Eigenschaft in diesem Fall den Wert null. Ein allfällige Setter-Methode muss diesen Wert als Parameter akzeptieren.
"selfRemove" Die Artikel, die dieser Kategorie zugewiesen sind, werden ebenfalls gelöscht.
« Built-in Ei Fields Custom Ei Fields »

Kommentare

Du musst eingeloggt sein, damit du Beiträge erstellen kannst.

Fragen