このようなものを見つけやすくなったような気がします。フォーム送信からコントローラーにデータを渡して、そのデータに基づいて何かを実行しようとしています。これを行うための最も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パラメーターにどのようにアクセスする必要がありますか?
コントローラーのようなルートコールバックでは、型付き関数パラメーターを使用してリクエストをプルできます。
use Symfony\Component\HttpFoundation\Request;
public function index(Request $request) {
$query_parameters = $request->query->all();
}