Drupal 8 - Surcharger la classe de l'entité User

Sous Drupal 8 il est possible de surcharger la classe du type d'entité « User » afin de par exemple ajouter nos propres getters et setters ou de modifier l'affichage par défaut d'un nom d'utilisateur.

Pour cela il faut informer drupal qu'on va changer la classe de base pour le type d'entité User. Cela se passe dans le .module via le hook HOOK_entity_type_alter :

function monmodule_entity_type_alter(array &$entity_types) {
  $entity_types['user']->setClass(\Drupal\monmodule\Entity\User::class);
}

Et il faut ensuite définir la classe en elle même :

# web/modules/custom/monmodule/src/Entity/User.php
<?php

namespace Drupal\monmodule\Entity;

use Drupal\domain\Entity\Domain;
use Drupal\user\Entity\User as UserBase;

class User extends UserBase {

  public function label() {
    return $this->lastname->value . ' ' . $this->firstname->value;
  }

  public function setDomain($domain_id) {
    $this->set('field_domain_access', [$domain_id]);
    return $this;
  }

}

Rien de foufou ici, j'ai surchargé la méthode « label », ainsi par exemple dans la listes des membres du site sera affiché en lieu et place de leur nom d'utilisateur, leurs nom et prénom. Il y a aussi un setter pour définir le domain de l'utilisateur.

Maintenant d'est que l'on chargera un utilisateur il sera de cette classe, et non plus de la classe de base.

Ceci est évidement possible pour l'ensemble des types d'entités (Noeuds, terme de taxonomy...)

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...