web-dev-qa-db-fra.com

Pouvons-nous ajouter le paramètre de requête de destination à un lien de la configuration yml?

Lors de la création d'un lien depuis yaml

à savoir: mymodule.links.action.yml

my_module.my_entity.add:
  route_name: node.add
  title: 'Add My Entity'
  route_parameters:
        node_type: 'my_entity'
  appears_on:
    - my_module.my_entity.admin_content

Existe-t-il un moyen de générer ces liens avec le ? Destination = chemin/vers/rediriger?

6
SwingingTom

Oui, vous pouvez ajouter la requête de destination directement dans le fichier yml. @see:\Drupal\Core\Menu\LocalActionDefault :: getOptions

à savoir: mymodule.links.action.yml

my_module.my_entity.add:
  route_name: node.add
  title: 'Add My Entity'
  route_parameters:
        node_type: 'my_entity'
  options:
    query:
      destination: '/path/to/redirect'
  appears_on:
    - my_module.my_entity.admin_content
15
jeanfei

La chaîne de requête ne fait pas partie de l'itinéraire. Le contrôleur récupère les paramètres de requête de la requête du serveur Web et effectue le traitement, dans ce cas, renvoie une redirection:

$request = \Drupal::request();
$destination = $request->query->get('destination');
return new RedirectResponse($destination);

Lors de la génération d'une URL pour l'exemple mentionné dans la question, le node_type est un paramètre qui va dans la route comme configuré dans le fichier yml de routage et la destination est un paramètre de requête qui est ajouté à l'url et ne fait pas partie de la route:

$url = \Drupal\Core\Url::fromRoute(
    'node.add',
     array('node_type' => $type->id()),
     array(
       'query' => array('destination' => $destination),
       'absolute' => TRUE,
     )
);

Des deux côtés, le système de routage ignore tout ce que vous mettez dans la requête de l'url, vous devez gérer cela dans le code vous-même.

13
4k4