Antisèche Drupal 8

Rédigé par Sylvain Lavielle
Développeur web freelance expert Drupal sur Toulouse

Le 19/05/2019
keyboard_arrow_left Bonne lecture ? Que diriez-vous de partager. sentiment_satisfied_alt

Voici un certain nombre de snippets assez fréquemment utilisés en Drupal 8

Services

Récupérer un service (si aucune possibilité d'injection) :

  $my_service = \Drupal::service('my.service'); 

Entités

Charger une entité

  $entity_type = 'node';
  $entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load($id);

Rendre une entité

  $display_mode = 'default';
  $view_builder = \Drupal::entityTypeManager()->getViewBuilder($entity_type);
  $full_output = $view_builder->view($entity);
  $rss_output = $view_builder->view($entity, $display_mode);

Champs

Vérifier qu'une entité dispose bien d'un champ

$entity->hasField('field_name');

Récupérer l'instance du champ

$field = $entity->getField('field_name');

Récupérer la chaîne de caractères d'un champ (attention : ne fonctionne bien que pour certains types de champs monovalués

$stringValue = $entity->getField('field_name')->getString();

Routes

Générer une Url à partir d'une route :

  Url::fromRoute('my.route', $parameters, $options)->toString();

Récupérer la route de la page en cours d'affichage :

\Drupal::routeMatch()->getRoute();

Récupérer un paramètre de la route de la page en cours d'affichage :

\Drupal::routeMatch()->getParameter('node');

Form

Récupérer le render-array d'un form :

 $form = \Drupal::formBuilder()->getForm(\Drupal\module_name\Form\MyForm::class); 

Requête

Requête sur des tables :

$query = \Drupal::database()->select('my_table', 't');
$query->addField('t', 'my_field');
$query->condition('t.my_other_field', 'my_test_value');
$results = $query->execute();

Requête simple sur un type d'entité :

$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'type' => 'my_content_type', 
  'field_my_matching_field' => $matching_value,
  // ...
  'status' => 1 
]);

Requête plus complexe sur un type d'entité :

$query = \Drupal::entityQuery('node')
  ->condition('type', 'my_content_type')
  ->condition('status', 1)
  ->condition('field_my_matching_field', $matching_value);
  // ...
$entities = Node::loadMultiple($query->execute());

Sujets abordés dans cet article