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
}
Yusef
fonte

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 .. :)

parth.k
fonte
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);
vgoradiya
fonte
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.

prashant
fonte
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