protected ViewsFormBase::ajaxFormWrapper($form_class, FormStateInterface &$form_state)
Wrapper for handling AJAX forms.
Wrapper around \Drupal\Core\Form\FormBuilderInterface::buildForm() to handle some AJAX stuff automatically. This makes some assumptions about the client.
Parameters
\Drupal\Core\Form\FormInterface|string $form_class: The value must be one of the following:
- The name of a class that implements \Drupal\Core\Form\FormInterface.
- An instance of a class that implements \Drupal\Core\Form\FormInterface.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
\Drupal\Core\Ajax\AjaxResponse|string|array Returns one of three possible values:
- A \Drupal\Core\Ajax\AjaxResponse object.
- The rendered form, as a string.
- A render array with the title in #title and the rendered form in the
#markup array.
File
- core/modules/views_ui/src/Form/Ajax/ViewsFormBase.php, line 193
Class
- ViewsFormBase
- Provides a base class for Views UI AJAX forms.
Namespace
Drupal\views_ui\Form\Ajax
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | protected function ajaxFormWrapper( $form_class , FormStateInterface & $form_state ) { /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service( 'renderer' ); // This won't override settings already in. if (! $form_state ->has( 'rerender' )) { $form_state ->set( 'rerender' , FALSE); } $ajax = $form_state ->get( 'ajax' ); // Do not overwrite if the redirect has been disabled. if (! $form_state ->isRedirectDisabled()) { $form_state ->disableRedirect( $ajax ); } $form_state ->disableCache(); // Builds the form in a render context in order to ensure that cacheable // metadata is bubbled up. $render_context = new RenderContext(); $callable = function () use ( $form_class , & $form_state ) { return \Drupal::formBuilder()->buildForm( $form_class , $form_state ); }; $form = $renderer ->executeInRenderContext( $render_context , $callable ); if (! $render_context ->isEmpty()) { BubbleableMetadata::createFromRenderArray( $form ) ->merge( $render_context ->pop()) ->applyTo( $form ); } $output = $renderer ->renderRoot( $form ); // These forms have the title built in, so set the title here: $title = $form_state ->get( 'title' ) ? : '' ; if ( $ajax && (! $form_state ->isExecuted() || $form_state ->get( 'rerender' ))) { // If the form didn't execute and we're using ajax, build up an // Ajax command list to execute. $response = new AjaxResponse(); // Attach the library necessary for using the OpenModalDialogCommand and // set the attachments for this Ajax response. $form [ '#attached' ][ 'library' ][] = 'core/drupal.dialog.ajax' ; $response ->setAttachments( $form [ '#attached' ]); $display = '' ; $status_messages = array ( '#type' => 'status_messages' ); if ( $messages = $renderer ->renderRoot( $status_messages )) { $display = '<div class="views-messages">' . $messages . '</div>' ; } $display .= $output ; $options = array ( 'dialogClass' => 'views-ui-dialog js-views-ui-dialog' , 'width' => '75%' , ); $response ->addCommand( new OpenModalDialogCommand( $title , $display , $options )); // Views provides its own custom handling of AJAX form submissions. // Usually this happens at the same path, but custom paths may be // specified in $form_state. $form_url = $form_state ->has( 'url' ) ? $form_state ->get( 'url' )->toString() : $this ->url( '<current>' ); $response ->addCommand( new SetFormCommand( $form_url )); if ( $section = $form_state ->get( '#section' )) { $response ->addCommand( new HighlightCommand( '.' . Html::cleanCssIdentifier( $section ))); } return $response ; } return $title ? [ '#title' => $title , '#markup' => $output ] : $output ; } |
Please login to continue.