web-dev-qa-db-ja.com

フォームリダイレクトからパラメーターを取得するにはどうすればよいですか?

私はフォームを作成し、送信結果をURL apiのリダイレクトページに取得しようとしています:

 public function submitForm(array &$form, FormStateInterface $form_state)
    {

    $metier=$form_state->getValue('metier');
    $position=$form_state->getValue('position');

    //$form_state->setRedirect('recherche.resultat',array('param'=>'test');

    $url = new Url('recherche.resultat');
    $url->setOptions(array('param'=>'test2'));
    $url->setRouteParameters(array('param'=>'test2'));

    $form_state->setRedirectUrl($url);

    drupal_set_message("envoyer");

}

2つのオプションを設定します。

$url->setOptions(array('param'=>'test2'));

そして

$url->setRouteParameters(array('param'=>'test2'));

フォームは私をリダイレクトし、これは私のコントローラーです:

public function resultat()
{
    $request = \Drupal::request();
    $url = Url::createFromRequest($request);
    kint($url);
    kint($url->getOptions());
    kint($url->getRouteParameters());
    return array('#markup'=>t('test'));

}

2つの方法:

    kint($url->getOptions());
    kint($url->getRouteParameters());

空です

これは私のルーティングです:

 recherche.resultat:
  path: '/resultat'
  defaults:
    _title: 'resultat'
    _controller: '\Drupal\recherche\Controller\ResultatRechercheController::resultat'
  requirements:
     _permission: 'access content'

パラメータはURL内にあり、$ _ GETで取得できますが、URL APIでどのように取得できますか?

5
Kevin

OK私はこの方法でそれを得ました:

だから私は私のコントローラーに渡すために私のフォームから2つのパラメーターを持っています:

public function submitForm(array &$form, FormStateInterface $form_state)
{

    $metier=$form_state->getValue('metier');
    $position=$form_state->getValue('position');

    $url = \Drupal\Core\Url::fromRoute('recherche.resultat')
          ->setRouteParameters(array('metier'=>$metier,'position'=>$position));

    $form_state->setRedirectUrl($url);


}

キーはYAMLルーティングにあり、パラメーターを取得するためにそのようなパスを構築する必要があります(パラメーターの名前はルートと同じである必要があります。前の関数(submitForm)を参照してください):

recherche.resultat:
  path: '/resultat/{metier}/{position}'
  defaults:
    _title: 'resultat'
    _controller: '\Drupal\recherche\Controller\ResultatRechercheController::resultat'
    metier: ''
    position: ''
  requirements:
     _permission: 'access content'

そして、私のパラメーターを取得するための私のコントローラーで:

クラス:ResultatRechercheController

 public function resultat($metier, $position)
    {

        kint($metier);
        kint($position);

        return array('#markup'=>t('la premiere spécialite est @specialite',array('@specialite'=>'test')));

    }

そしてURLはきれいです:

localhost:8888 // monsite.com/resultat/{metier}/{position}

6
Kevin

Get属性は、リクエストオブジェクト\Drupal::request()->attributes->get('param');または\Drupal::request()->queryから直接取得できます。

ソース: https://api.drupal.org/api/drupal/core%21lib%21Drupal.php/function/Drupal%3A%3Arequest/8

3
SebCorbin

ブロックフォームでは、ルーティングせずにフォームリダイレクトURLにパラメーターを追加するだけです。

public function submitForm(array &$form, FormStateInterface $form_state) {
  # get form data
    $form_var = $form_state->getValue('input_name')
    ...

  # set form data in url redirect
  $option = [
    'query' => ['testvar' => $form_var],
  ];
  $url = Url::fromUri('internal:/my_url/redirect', $option);

  $form_state->setRedirectUrl($url);
}

次に、それを取得してクリーニングします。

# retrieve query param
$my_var = \Drupal::request()->query->get('testvar');

# clean for a textfield
$my_var_escaped = Html::escape($my_var);
0
Flo Develop