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

Posté le Mardi 21 janvier 2020 - 07:14

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 :

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

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

  1. # web/modules/custom/monmodule/src/Entity/User.php
  2. <?php
  3.  
  4. namespace Drupal\monmodule\Entity;
  5.  
  6. use Drupal\domain\Entity\Domain;
  7. use Drupal\user\Entity\User as UserBase;
  8.  
  9. class User extends UserBase {
  10.  
  11. public function label() {
  12. return $this->lastname->value . ' ' . $this->firstname->value;
  13. }
  14.  
  15. public function setDomain($domain_id) {
  16. $this->set('field_domain_access', [$domain_id]);
  17. return $this;
  18. }
  19.  
  20. }

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é

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...