AjaxRegisterForm.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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_user\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 AjaxRegisterForm 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. // http://web-tricks.org/content/how-render-user-login-form-and-user-register-form-drupal-8
  40. $entity = \Drupal::entityTypeManager()
  41. ->getStorage('user')
  42. ->create(array());
  43. // to use modal form display see materio_user_entity_type_build()
  44. $formObject = \Drupal::entityTypeManager()
  45. ->getFormObject('user', 'modal')
  46. ->setEntity($entity);
  47. $this->form_builded = $this->formBuilder()->getForm($formObject);
  48. }
  49. /**
  50. * Handler for getform request.
  51. */
  52. public function getForm(Request $request) {
  53. $this->getFormDefinition();
  54. $rendered = render($this->form_builded);
  55. // $form_builded = $this->form_builded;
  56. // $rendered = \Drupal::service('renderer')->executeInRenderContext(new RenderContext(), function () use ($form_builded) {
  57. // return render($form_builded);
  58. // });
  59. $data = [
  60. 'rendered' => $rendered,
  61. // '#cache' => [
  62. // 'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
  63. // 'tags' => [
  64. // 'materio_sapi-search_form-cache',
  65. // ]
  66. // ]
  67. ];
  68. $response = new JsonResponse();
  69. $response->setData($data);
  70. // $response = new CacheableJsonResponse($data);
  71. // $response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
  72. return $response;
  73. }
  74. }