web-dev-qa-db-ja.com

yml設定からリンクに宛先クエリパラメータを追加できますか?

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で生成される方法はありますか?

6
SwingingTom

はい、宛先クエリを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
15
jeanfei

クエリ文字列はルートの一部ではありません。コントローラーはウェブサーバーリクエストからクエリパラメーターをフェッチして処理を行います。この場合、リダイレクトを返します。

$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のクエリに入力したものをすべて無視します。これは、コードで自分で処理する必要があります。

13
4k4