Skip to content

Instantly share code, notes, and snippets.

@prashantdsala
Last active April 12, 2023 06:59
Show Gist options
  • Save prashantdsala/4ec4a7e04bf589aff6f0f4c5106df824 to your computer and use it in GitHub Desktop.
Save prashantdsala/4ec4a7e04bf589aff6f0f4c5106df824 to your computer and use it in GitHub Desktop.
Drupal - Snippet to programatically return a view as a response to AJAX request from controller
<?php
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\views\Views;
use Drupal\Core\Render\Renderer
/**
* Drupal\Core\Render\Renderer definition.
*
* @var \Drupal\Core\Render\Renderer
*/
protected $renderer;
/**
* Drupal\Core\Form\FormBuilder definition.
*
* @var \Drupal\Core\Form\FormBuilder
*/
protected $formBuilder;
/**
* constructor.
*/
public function __construct(Renderer $renderer, FormBuilder $formBuilder, BlockManager $pluginManagerBlock) {
$this->renderer = $renderer;
$this->formBuilder = $formBuilder;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('renderer'),
$container->get('form_builder'),
);
}
$view = Views::getView($view);
if ($view) {
$view->setDisplay($display);
$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);
$html = $this->formBuilder->buildForm('\Drupal\views\Form\ViewsExposedForm', $form_state);
}
$ajax_response = new AjaxResponse();
$target = "#your_id" // or ".classname" of HTML
$ajax_response->addCommand(new HtmlCommand($target, $html));
return $ajax_response;
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment