Redirecionar após o envio do formulário


16

Eu crio um formulário personalizado no Drupal 8, lembro que podemos redirecionar para o caminho personalizado no Drupal 7 com conjunto $form_state['redirect'] = 'mycustompath';no manipulador de envio personalizado, mas como redirecionar o usuário após o envio do formulário no Drupal 8?

Eu sei que devo usar o submitFormmétodo:

public function submitForm(array &$form, FormStateInterface $form_state)
{
   //submissions jobs ...
   //redirect path
}

Respostas:


30

No seu método "submitForm", escreva o código abaixo

 $form_state->setRedirect('machine_name');
 return;

onde machine_nameé o nome da máquina mencionado no arquivo de roteamento.

Eu espero que isso ajude .. :)


não funciona. Eu tento minha rota personalizada $form_state->setRedirect('/start');return;, suponha que eu queira redirecionar para a página inicial. o que é snippet exato?
Yusef 26/05

11
$ form_state-> setRedirect ('<frente>'); Retorna;
Parth.k 26/05

não deve ser '/ start'. É o alias mencionado no arquivo de roteamento.
Parth.k 26/05

'<front>'trabalhou o que você sobre alias do caminho? esta é a minha rotatcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
Yusef 26/05

Deve ser $ form_state-> setRedirect ('tcdev.content');
parth.k 26/05

8

Se você deseja definir o buildform, precisará usar algum caminho de roteamento, como.

use Drupal\Core\Url;

$url = Url::fromRoute('route.path');
$form_state->setRedirectUrl($url);

qual é o espaço para nome do URL? Url' not found
Yusef 26/05

deve ser use Drupal\Core\Url;(sem a barra precedente)
ummdorian

$form_state->setRedirectUrl($url);também pode ser usado em submitForm ().
Shaun Dychko 5/05

Verifique a API: api.drupal.org/api/drupal/… . setRedirect () apenas converte a rota em um URL primeiro e depois chama setRedirectUrl ().
Imclean>

0

Se você deseja redirecionar o formulário de edição do usuário para a página inicial ou outra página, siga o código abaixo.

Primeiro, adicione-hook - hook_form_alter`

function yourmodulename_form_alter(&$form, FormStateInterface $form_state, $form_id) 
{
    if ($form_id === 'your form id') {
    $form['actions']['submit']['#submit'][] = 'modulename_user_edit_form_submit';
  } 
}

depois de adicionar o gancho, adicione a função abaixo

function modulename_user_edit_form_submit($form,  FormStateInterface &$form_state) {
  global $base_url; //set base path
  $response = new Symfony\Component\HttpFoundation\RedirectResponse($base_url ."/xyz"); //set url
  $response->send();
  return;
}

Espero que isso ajude.


Isso não ignora todos os manipuladores de envio que devem ser acionados após o manipulador?
joekers

Você deve $form_state->setRedirect()enviar apenas no formulário para que todos os outros manipuladores de envio possam ser processados.
Joekers # 1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.