私はフォームを作成し、送信結果を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でどのように取得できますか?
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}
Get属性は、リクエストオブジェクト\Drupal::request()->attributes->get('param');
または\Drupal::request()->query
から直接取得できます。
ソース: https://api.drupal.org/api/drupal/core%21lib%21Drupal.php/function/Drupal%3A%3Arequest/8
ブロックフォームでは、ルーティングせずにフォームリダイレクト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);