/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { if ($form_state->get('json')) { $form_state->setResponse(new JsonResponse($form_state->getValues())); } else { $form_state->disableRedirect(); } }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { if (!$form_state->isValueEmpty('redirection')) { if (!$form_state->isValueEmpty('destination')) { // The destination is a random URL, so we can't use routed URLs. // @todo Revist this in https://www.drupal.org/node/2418219. $form_state->setRedirectUrl(Url::fromUserInput('/' . $form_state->getValue('destination'))); } } else { $form_state->disableRedirect(); } }
/** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { if (!$form_state->isValueEmpty('redirection')) { if (!$form_state->isValueEmpty('destination')) { // @todo Use Url::fromPath() once https://www.drupal.org/node/2351379 is // resolved. $form_state->setRedirectUrl(Url::fromUri('base://' . $form_state->getValue('destination'))); } } else { $form_state->disableRedirect(); } }
/** * 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. * * @param \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. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * * @return \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. */ 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); drupal_process_attached($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', 'width' => '75%'); $response->addCommand(new OpenModalDialogCommand($title, $display, $options)); if ($section = $form_state->get('#section')) { $response->addCommand(new Ajax\HighlightCommand('.' . Html::cleanCssIdentifier($section))); } return $response; } return $title ? ['#title' => $title, '#markup' => $output] : $output; }
public function resetForm(&$form, FormStateInterface $form_state) { // _SESSION is not defined for users who are not logged in. // If filters are not overridden, store the 'remember' settings on the // default display. If they are, store them on this display. This way, // multiple displays in the same view can share the same filters and // remember settings. $display_id = $this->view->display_handler->isDefaulted('filters') ? 'default' : $this->view->current_display; if (isset($_SESSION['views'][$this->view->storage->id()][$display_id])) { unset($_SESSION['views'][$this->view->storage->id()][$display_id]); } // Set the form to allow redirect. if (empty($this->view->live_preview) && !\Drupal::request()->isXmlHttpRequest()) { $form_state->disableRedirect(FALSE); } else { $form_state->setRebuild(); $this->view->exposed_data = array(); } $form_state->setRedirect('<current>'); $form_state->setValues([]); }
/** * {@inheritdoc} */ public function disableRedirect($no_redirect = TRUE) { $this->mainFormState->disableRedirect($no_redirect); return $this; }
/** * @covers ::disableRedirect * * @dataProvider providerSingleBooleanArgument * * @param bool $no_redirect */ public function testDisableRedirect($no_redirect) { $this->decoratedFormState->disableRedirect($no_redirect)->shouldBeCalled(); $this->assertSame($this->formStateDecoratorBase, $this->formStateDecoratorBase->disableRedirect($no_redirect)); }