Hervorgehobenes Formular einer Ansicht programmatisch ausgeben

Geschrieben von patrick am Mi., 08.03.2017 - 09:29 Uhr

Falls Sie ein hervorgehobenes Formular einer Ansicht programmatisch ausgeben wollen, können Sie folgenden Schnipsel verwenden. Das Ergebnis ist ein renderable array für das hervorgehobene Formular.

use Drupal\Core\Form\FormState;
use Drupal\views\Views;
 
$form = [];
$view_id = 'your_view_id';
$display_id = 'your_display_id';
$view = Views::getView($view_id);
if ($view && $view->access($display_id)) {
  $view->setDisplay($display_id);
  $view->initHandlers();
  $form_state = (new FormState())
    ->setStorage([
      'view' => $view,
      'display' => &$view->display_handler->display,
      'rerender' => TRUE,
    ])
    ->setMethod('get')
    ->setAlwaysProcess()
    ->disableRedirect();
  $form_state->set('rerender', NULL);
  $form = \Drupal::formBuilder()->buildForm('\Drupal\views\Form\ViewsExposedForm', $form_state);
}

Als erstes lassen wir uns das ViewExecutable-Objekt der Ansicht von Views geben, indem wir dessen Methode getView mit der Id der Ansicht als Parameter aufrufen. Wir setzen das korrekte Display und initialisieren die Handler. Dann erstellen wir ein neues FormState-Objekt, das wir mit ViewsExposedForm verwenden können. Schließlich rufen wir den FormBuilder-Service auf und bauen das renderable array für das Formular.

Beachten Sie: Falls das Display Ihrer Ansicht keine URL hat (z.B. weil es ein Master- oder Block-Display ist), dann wird die URL der aktuellen Seite als Action-URL des Formulars verwendet. Damit das Formular funktioniert, muss die URL eine URL sein, auf der das zugehörige Display der Ansicht angezeigt wird. Wenn Sie das Formular auf einer anderen Seite ausgeben möchten als das Display der Ansicht, müssen Sie daher die URL manuell anpassen. Das können Sie erreichen, indem Sie $form['#action'] in dem renderable array überschreiben.

Systeme
Drupal 8/9