it-swarm.com.de

Fügen Sie dem Benutzer Felder aus einem benutzerdefinierten Modul hinzu

Ich baue ein kleines benutzerdefiniertes Modul und sollte die Standardbenutzerentität irgendwie erweitern, indem ich etwa 20 weitere Felder hinzufüge.

Ich habe Benutzerklassendefinitionen aus dem Ordner Drupal Ordner (\ drupal-8.1.8\core\modules\user\src\Entity\User.php) gefunden. Dort kann ich Felddefinitionen sehen, aber das ist nicht richtig Ort, an dem Änderungen vorgenommen werden müssen :)

Außerdem sollte ich das Benutzermodul als Abhängigkeit zu meinem benutzerdefinierten Modul hinzufügen, obwohl das Benutzermodul Teil des Kerns ist.

Ich habe einige Nachforschungen angestellt und denke, ich sollte ein Plugin implementieren, aber ich weiß nicht, wie genau und welche Plugin-Schnittstelle ich implementieren soll usw.

5
kivikall

Basisfelder

Sie können der Benutzerentität in einem Hook Basisfelder hinzufügen:

use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
/**
 * Implements hook_entity_base_field_info().
 */
function mymodule_entity_base_field_info(EntityTypeInterface $entity_type) {
  if ($entity_type->id() === 'user') {
    $fields['field1'] = BaseFieldDefinition::create('text')
      ->setLabel(t('New field 1'))
      ->setTranslatable(TRUE);
    return $fields;
  }
}

Bündelfelder

In den meisten Fällen möchten Sie jedoch wahrscheinlich Bundle-Felder verwenden, die in der Benutzeroberfläche hinzugefügt und geändert werden können und einfach über die Konfiguration bereitgestellt werden können. In D8 ist die Benutzerentität wie Knoten feldfähig.

Siehe dieses Tutorial:

Programmieren von benutzerdefinierten Feldern in Ihren Inhaltstyp

Sie können das gleiche Verfahren auf Benutzer anwenden. Ersetzen Sie node durch user, auch den Inhaltstyp durch user, da die Benutzerentität keine Bundles enthält und Sie dann den Entitätsnamen als Ersatz verwenden.

In einer Standardinstallation user_picture ist das einzige standardmäßig konfigurierte Benutzerfeld, das Sie als Beispiel verwenden können:

field.field.user.user.user_picture.yml

Sie können sehen, dass user im Konfigurationsnamen für den Entitätstyp und den Bundle-Namen zweimal enthalten ist.

So fügen Sie die Felder hinzu

Der einfachste Weg, dies in einem benutzerdefinierten Modul zu implementieren, besteht darin, die Felder in der Benutzeroberfläche hinzuzufügen

/admin/config/people/accounts/fields

und exportieren Sie dann die konfigurierten Felder:

/admin/config/development/configuration

Wenn Sie die vollständige Konfiguration vor und nach dem Hinzufügen der Felder exportieren, können Sie einen Unterschied machen, um alle neuen Yaml-Dateien abzufangen.

Legen Sie die neuen Konfigurationsdateien in /config/install Ihres Moduls. Entfernen Sie die UUID-Zeile aus den exportierten Yaml-Dateien.

4
4k4