Hi

Form alter is called twice when filter are exposed in a block, form alter can access view object correctly on first call, in second call it's empty
Steps to reproduce
1> create a view of page type
2> select any of the filters to be exposed ,
3> Under Exposed form ,select Exposed form in block to YES,
4> Place the block on any region on the page
5> write a form_alter in custom module, the exposed form will be called twice, once where view query object is there , and one where it is null

Thanks,
Namit Garg

Support from Acquia helps fund testing for Drupal Acquia logo

Comments

namit.garg created an issue. See original summary.

MustangGB’s picture

Project: Views (for Drupal 7) » Drupal core
Version: 8.x-3.x-dev » 8.7.x-dev
Component: exposed filters » views.module

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 9.1.x-dev » 9.2.x-dev

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

tonytheferg’s picture

I think it is related to this issue from drupal 7. I am seeing the same thing. Putting an exposed search form in a block, and logging the submission reults in 3 for me, I think one for the master display, one for the page, and one for the form in the block.

My comment from this issue:
https://www.drupal.org/project/views/issues/2088549

We have a similar problem in drupal 8/9. Anyone have a suggestion as to where to start with this? drupal_render is deprecated in D8,

In ExposedFormPluginBase

@ namespace Drupal\views\Plugin\views\exposed_form;

$form = \Drupal::formBuilder()->buildForm('\Drupal\views\Form\ViewsExposedForm', $form_state);
  $errors = $form_state->getErrors();

  // If the exposed form had errors, do not build the view.
  if (!empty($errors)) {
    $this->view->build_info['abort'] = TRUE;
  }

  if (!$this->view->display_handler->displaysExposed() || (!$block && $this->view->display_handler->getOption('exposed_block'))) {
    return [];
  }
  else {
    // this didn't work:
    // return \Drupal::service('renderer')->render($form);
    return $form;
  }
}

I tried as a stab in the dark, replacing return $form with return \Drupal::service('renderer')->render($form);

Got the following error.

Error: Cannot use object of type Drupal\Core\Form\FormState as array in Drupal\views\Plugin\views\exposed_form\ExposedFormPluginBase->renderExposedForm() (line 134 of *\web\core\modules\views\src\Plugin\views\exposed_form\ExposedFormPluginBase.php)

tonytheferg’s picture

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.