it-swarm.com.de

Wie rufe ich die Abfrageparameter von einem Pfad ab?

Wie rufe ich die Abfrageparameter von einem Pfad ab? Hier ist mein Weg:

/ search? keys = hallo

Folgendes habe ich versucht:

$test1 = \Drupal::request()->request->get('name');
$test2 = \Drupal::request()->query->get('name');
$test3 = \Drupal::service('path.current')->getPath();
$test4 = \Drupal::request()->server->get('REQUEST_METHOD');
$test5 = \Drupal::request()->query->get('q');
$test6 = \Drupal::request()->request->get('keys');
$test7 = \Drupal::request()->query->get('keys');
$test8 = \Drupal::request()->query->get('destination');
$test9 = \Drupal::request()->request->all();
$test10 = \Drupal::request()->getRequestUri();

Hier sind die Ergebnisse:

Test 1: NULL

Test 2: NULL

Test 3: '/ search'

Test 4: 'GET'

Test 5: NULL

Test 6: NULL

Test 7: NULL

Test 8: NULL

Test 9: array ()

Test 10: '/ search'

Warum funktioniert das nicht?

10
dbj44

Das Problem war, dass der Block zwischengespeichert wurde. Siehe Clives Kommentar :

public function build() {
  $test = \Drupal::request()->query->get('keys');
  return array(
    '#markup' => $test,
    '#cache' => array(
      'contexts' => array(
        'url.query_args:keys',
      ),
    ),
  );
}
10
dbj44

Dies ist ein Duplikat . Wenn Sie sich das Änderungsprotokoll ansehen, gibt es ein schönes Beispiel dafür, wie Sie die Variablen $ _GET und $ _POST abrufen können.

Ich habe lokal unter/search? Keys = hallo und getestet

\Drupal::request()->query->get('keys');

funktioniert, sowie

\Drupal::request()->get('keys');

Ich habe Ihren benutzerdefinierten Block getestet und er funktioniert einwandfrei. Haben Sie versucht, den Cache zu leeren?

Aktualisieren:

Wenn es sich um ein Caching handelt, können Sie festlegen, dass Ihr Block nicht zwischengespeichert wird, da es sich um einen Suchblock handelt. Oder Sie können festlegen, dass für jeder Parametersatz zwischengespeichert wird. Danke @clive für den Link.

8
oknate

Du warst nah. Alles was Sie tun müssen, ist:

$keys = \Drupal::request()->get('keys');

Hier ist ein Beispiel, wie ich es benutze:

/**
 * Implements hook_preprocess_views_view()
 * @param $variables
 */
function mytheme_preprocess_views_view(&$variables) {
  if ($variables['id'] == 'acquia_search' && $variables['display_id'] == 'results') {
    $variables['get']['keywords'] = Xss::filter(\Drupal::request()->get('keywords'));
    $variables['get']['sort_by'] = Xss::filter(\Drupal::request()->get('sort_by'));
    $variables['get']['sort_order'] = Xss::filter(\Drupal::request()->get('sort_order'));

    if (!Unicode::strlen($variables['get']['sort_by'])) {
      $variables['get']['sort_by'] = 'search_api_relevance';
    }

    if (!Unicode::strlen($variables['get']['sort_order'])) {
      $variables['get']['sort_order'] = 'DESC';
    }
  }
}
7
Kevin