AjaxSearchForm.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. // https://www.qed42.com/blog/autocomplete-drupal-8
  3. // https://www.drupal.org/docs/8/modules/search-api/developer-documentation/executing-a-search-in-code
  4. namespace Drupal\materio_sapi\Controller;
  5. use Drupal\Core\Controller\ControllerBase;
  6. use Symfony\Component\DependencyInjection\ContainerInterface;
  7. use Drupal\Core\Form\FormBuilder;
  8. use Drupal\Core\Form\FormState;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Drupal\Core\Cache\CacheableJsonResponse;
  12. use Drupal\Core\Cache\CacheableMetadata;
  13. use Drupal\core\render\RenderContext;
  14. /**
  15. * Defines a route controller for entity autocomplete form elements.
  16. */
  17. class AjaxSearchForm extends ControllerBase {
  18. /**
  19. * The form builder.
  20. *
  21. * @var \Drupal\Core\Form\FormBuilder
  22. */
  23. protected $formBuilder;
  24. /**
  25. * Construct.
  26. */
  27. public function __construct(FormBuilder $formBuilder) {
  28. $this->formBuilder = $formBuilder;
  29. }
  30. /**
  31. * {@inheritdoc}
  32. */
  33. public static function create(ContainerInterface $container) {
  34. return new static(
  35. $container->get('form_builder')
  36. );
  37. }
  38. private function getFormDefinition(){
  39. $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  40. \Drupal::logger('materio_sapi')->notice($language);
  41. // $form_state = new FormState();
  42. $this->form_builded = $this->formBuilder->getForm('Drupal\materio_sapi\Form\MaterioSapiSearchForm', $language);
  43. }
  44. /**
  45. * Handler for getform request.
  46. */
  47. public function getForm(Request $request) {
  48. $this->getFormDefinition();
  49. $rendered = render($this->form_builded);
  50. // $form_builded = $this->form_builded;
  51. // $rendered = \Drupal::service('renderer')->executeInRenderContext(new RenderContext(), function () use ($form_builded) {
  52. // return render($form_builded);
  53. // });
  54. $data = [
  55. 'rendered' => $rendered,
  56. // '#cache' => [
  57. // 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
  58. // 'tags' => [
  59. // 'materio_sapi-search_form-cache',
  60. // ]
  61. // ]
  62. ];
  63. $response = new JsonResponse();
  64. $response->setData($data);
  65. // $response = new CacheableJsonResponse($data);
  66. // $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
  67. return $response;
  68. }
  69. }