Erstellen Sie Inhalte programmgesteuert

9

Wie kann ich in Drupal 8 Inhalte programmgesteuert erstellen? Aus der "Drupal 8" -Verwaltung habe ich einen neuen Typ "Haus" erstellt (enthält eine Beschreibung, ein Bild, ein Referenzfeld für Benutzer ...). Wie kann ich aus einem benutzerdefinierten Modul einen Entitätstyp "Haus" erstellen?

In meinem benutzerdefinierten Modul habe ich eine Formulardatei (enthält eine Klasse, die FormBase erweitert). Im Submit-Rückruf möchte ich ein neues "Haus" erstellen, Werte festlegen und die neue Entität speichern.

Ich finde keine Beispiele im Web, im Kern ...

matthieu lopez
quelle
Ihre zweite Frage "Wie kann ich einen Entitätstyp 'Haus' erstellen?" ist ein wenig verwirrend. Ich denke, die Frage lautet: "Wie kann ich aus einem benutzerdefinierten Modul einen Knoten vom Knotentyp" House "erstellen?" Die Mehrdeutigkeit ergibt sich aus der Verwendung von "Entitätstyp", der in Drupal eine sehr spezifische Bedeutung hat, und die Frage könnte lauten: "Wie kann ich aus einem benutzerdefinierten Modul einen benutzerdefinierten Entitätstyp namens" House "erstellen?" oder "Wie kann ich eine benutzerdefinierte Entität erstellen, die das Bundle 'House' verwendet?"
mradcliffe

Antworten:

15

Hier ist ein einfaches Beispiel für das Erstellen eines Knotens in Drupal 8.

$data = [
  'type' => 'article', 
  'title' => 'My new title', 
  'uid' => 1
];
$node = Drupal::entityTypeManager()
  ->getStorage('node')
  ->create($data);
$node->save();

Aktualisiert, um veraltete Funktionen gemäß den Kommentaren von @mradcliffe zu entfernen. Vielen Dank!

Zu Ihrer Information, um kleine Codefragmente wie diesen zu testen, drush core-clifunktioniert der Befehl hervorragend. Siehe: http://www.drushcommands.com/drush-7x/core/core-cli

Hackmesser
quelle
1
Kann vor dem Speichern mit dem entityManager für jedes Feld festgestellt werden, welcher Datentyp festgelegt werden muss? (Text für Textfeld, FID für Datei usw.)
Matthieu Lopez
Die einzige Möglichkeit, die ich derzeit kenne, besteht darin, eine andere veraltete Methode zu verwenden, EntityManager :: getDefinitions (). Wenn Sie jedoch eine EntityDataDefinition über die statische create-Methode instanziieren, können Sie getPropertyDefinitions () aufrufen. Beide geben Definitionen für jede Eigenschaft zurück, z. B. Titel oder Feld. Es gibt auch getFieldStorageDefinitions (), das dasselbe zurückgibt, jedoch von der Speicherentität (siehe getStorage ('node') oben). Dies ist jedoch möglicherweise nicht für Nicht-SQL-Treiber verfügbar.
mradcliffe
0

Ab Drupal werden 8 Knoten jetzt als Entitäten behandelt. Sie können einfach einen Knoten mit dem folgenden Code erstellen

$new_page_values = array();
$new_page_values['type'] = 'my_content_type';
$new_page_values['title'] = $form_state['values']['page_title'];
$new_page_values['path'] = $new_page_path;

$new_page = entity_create('node', $new_page_values);
$new_page->save();
Shabir A.
quelle
2
entity_create () ist eine veraltete Methode, die wir vermeiden sollten. Das Einfügen des EntityManager in die Form-Klasse oder die Verwendung von \ Drupal :: entityManager sind die Standardmethoden zum Verwalten von Entitäten.
mradcliffe