I created a modal form with Ajax:
<?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ namespace Drupal\hello\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax; use Drupal\Core\Ajax\OpenModalDialogCommand; /** * Description of HelloModalForm * * @author arthur */ class HelloModalForm extends FormBase { public function buildForm(array $form, FormStateInterface $form_state) { $form['#attached']['library'][] = 'core/drupal.dialog.ajax'; $form['node_title'] = array( '#type' => 'textfield', '#title' => $this->t('Node\'s title'), '#description' => $this->t('Enter a portion of the title to search for'), ); $form['actions']['type'] = 'actions'; $form['actions']['submit'] = array( '#type' => 'submit', '#value' => $this->t('Search'), '#ajax' => array( // here we add ajax callback where we will process 'callback' => '::open_modal', // the data that came from the form in modal window ), ); $form['#title'] = 'Seach for Node by Title'; return $form; } public function getFormId() { return 'hello_model_form'; } public function validateForm(array &$form, FormStateInterface $form_state) { // input your code for validation, no validation required in this search } public function submitForm(array &$form, FormStateInterface $form_state) { } public function open_modal(&$form, FormStateInterface $form_state) { $node_title = $form_state->getValue('node_title'); $query = \Drupal::entityQuery('node')->condition('title', $node_title, 'CONTAINS'); $entity = $query->execute(); $key = array_keys($entity); $id = !empty($key[0]) ? $key[0] : NULL; $response = new AjaxResponse(); $title = 'Node ID'; if ($id !== NULL) { $content = '<div class="test-popup-content"> Node ID is: ' . $id . '</div>'; $options = array( 'dialogClass' => 'popup-dialog-class', 'width' => '300', 'height' => '300', ); $response->addCommand(new OpenModalDialogCommand($title, $content, $options)); } else { $content = 'Not found record with this title <strong>' . $node_title . '</strong>'; $options = array( 'dialogClass' => 'popup-dialog-class', 'width' => '300', 'height' => '300', ); $response->addCommand(new OpenModalDialogCommand($title, $content, $options)); } return $response; } } Error Message on calling Modal form:
User error: "type" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php). Drupal\Core\Render\Element::children(Array) (Line: 1027) Drupal\Core\Form\FormBuilder->doBuildForm('hello_model_form', Array, Object) (Line: 1073) Drupal\Core\Form\FormBuilder->doBuildForm('hello_model_form', Array, Object) (Line: 575) Drupal\Core\Form\FormBuilder->processForm('hello_model_form', Array, Object) (Line: 321) Drupal\Core\Form\FormBuilder->buildForm(Object, Object) (Line: 91) Drupal\Core\Controller\FormController->getContentResult(Object, Object) call_user_func_array(Array, Array) (Line: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber{closure}() (Line: 573) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber{closure}() (Line: 151) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 68) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106) Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 52) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23) Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 708) Drupal\Core\DrupalKernel->handle(Object) (Line: 19) User error: "type" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php). Drupal\Core\Render\Element::children(Array, ) (Line: 402) Drupal\Core\Render\Renderer->doRender(Array) (Line: 444) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 200) Drupal\Core\Render\Renderer->render(Array, ) (Line: 226) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent{closure}() (Line: 573) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 227) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 117) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.view', Object) (Line: 156) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 68) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 57) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106) Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 47) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 52) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23) Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 708) Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
$node_titleis indeed a string not an array?