Antisèche Drupal 8

Contribué par Sylvain Lavielle le 19/05/2019

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::entityManager()->getViewBuilder($entity_type);
  $full_output = $view_builder->view($entity);
  $rss_output = $view_builder->view($entity, $display_mode);

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');
    ->addField('t', 'my_field');
    ->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());