web-dev-qa-db-ja.com

フォームのリダイレクトからコントローラーにパラメーターを渡すにはどうすればよいですか?

このようなものを見つけやすくなったような気がします。フォーム送信からコントローラーにデータを渡して、そのデータに基づいて何かを実行しようとしています。これを行うための最もDrupal方法は何ですか(つまり、リクエストオブジェクトに直接アクセスすることなく)?

FormBaseを拡張するカスタムモジュールのフォームには、このメソッドがあります。

public function submitForm(array &$form, FormStateInterface $form_state) {
    $var_to_send = $form_state->getValue('val_to_get'); 
    $form_state->setRedirect('my.route', [ 'sent_var' => $var_to_send ]);
}

この場合、my.routeは次のように構成されています。

my.route:
  ...
  defaults:
    _controller: '\Drupal\custom_module\Controller\MyController::index'
    ...

\ Drupal\custom_module\Controller\MyController.phpに次のメソッドがあります。

public function index() {
    $params = \Drupal::request()->query->all();
    $this->myfunc($params['sent_var']);
}

このページ は、私がやっていることは非常に非推奨であると述べています。それでは、コントローラーのURLパラメーターにどのようにアクセスする必要がありますか?

2

コントローラーのようなルートコールバックでは、型付き関数パラメーターを使用してリクエストをプルできます。

use Symfony\Component\HttpFoundation\Request;

  public function index(Request $request) {
    $query_parameters = $request->query->all();

  }
3
4k4