it-swarm.com.de

Wie erstelle ich programmgesteuert einen Knoten bei der Benutzerregistrierung mit dem Benutzer als Autor?

Ich möchte für jeden Benutzer bei der Registrierung einen einzelnen Knoten vom Inhaltstyp XYZ erstellen.

Ich habe versucht, hook_user_insert() (hook_entity_insert()) zu verwenden, aber dies funktioniert nicht, da beim Festlegen der nid auf die uid die uid immer noch 0 (anonymer Benutzer) und der Knoten ist muss dem neu erstellten Konto zugewiesen werden. (HINWEIS: Dies war mein Missverständnis, siehe unten.)

Ich möchte die Knoten bei der Kontoerstellung erstellen, da jeder Benutzer nur einen Knoten dieses Inhaltstyps haben sollte.

In Drupal 7 habe ich dies in Regeln mithilfe eines Regelsatzes geschafft, in dem ich das Benutzerkonto gespeichert und dann den neuen Knoten erstellt habe. Da Rules für Drupal 8 noch nicht in der Beta ist, versuche ich dies programmgesteuert.

Hier ist der Code, den ich verwende:

function MYMODULE_user_insert(Drupal\Core\Entity\EntityInterface $entity) {
  $user = \Drupal::currentUser();
  $profile = Node::create(['type' => 'userprofilenode']);
  $profile->set('uid', $user->id());
  $profile->enforceIsNew();
  $profile->save();

Wie in der Antwort von 4k4 erwähnt, hat $ entity bereits eine UID. Das Problem ist, dass ich fälschlicherweise den aktuellen Benutzer eingeführt habe, der 0 (anonym) ist.

6
Patrick Kenny

In einem Insert-Hook ist der Benutzer bereits gespeichert und sollte eine Benutzer-ID haben. Das Erstellen eines Knotens und das Zuweisen des Knotens zum neuen Benutzer als Autor sollte also kein Problem sein:

/**
 * Implements hook_ENTITY_TYPE_insert() for user entities.
 *
 * Adds a first node for a new user
 */
function mymodule_user_insert(\Drupal\user\UserInterface $user) {
  \Drupal\node\Entity\Node::create([
    'type' => 'XYZ',
    'title' => 'First node for user #' . $user->id(),
    'uid' => $user->id(),
  ])->save();
}
9
4k4