Yamlからリンクを作成するとき
つまり: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
このリンクが?destination = path/to/redirectで生成される方法はありますか?
はい、宛先クエリをymlファイルに直接追加できます。 @see:\ Drupal\Core\Menu\LocalActionDefault :: getOptions
つまり: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
クエリ文字列はルートの一部ではありません。コントローラーはウェブサーバーリクエストからクエリパラメーターをフェッチして処理を行います。この場合、リダイレクトを返します。
$request = \Drupal::request();
$destination = $request->query->get('destination');
return new RedirectResponse($destination);
質問で言及された例のURLを生成するとき、node_type
は、ルーティングymlファイルで構成されたルートに入るパラメーターであり、宛先は、URLに追加され、ルートの一部ではないクエリパラメーターです。
$url = \Drupal\Core\Url::fromRoute(
'node.add',
array('node_type' => $type->id()),
array(
'query' => array('destination' => $destination),
'absolute' => TRUE,
)
);
両側で、ルーティングシステムは、URLのクエリに入力したものをすべて無視します。これは、コードで自分で処理する必要があります。