Eu tenho um módulo personalizado que exibe um formulário.
Ao enviar o formulário, desejo redirecionar o usuário para uma página diferente.
Como eu posso fazer isso?
No manipulador de envio que você faz
Drupal 7:
$form_state['redirect'] = 'url';
Drupal 8:
$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(\Drupal\Core\Url);
/my-form?destination=node/123
.Deve-se notar que existem vários gatilhos que podem impedir um redirecionamento:
$form_state['redirect'] === FALSE
: Se definido, a função do construtor de formulários ou o manipulador de validação / envio de formulários não deseja que um usuário seja redirecionado, o que significa quedrupal_goto()
não é chamado. Para a maioria dos formulários, a lógica de redirecionamento será a mesma, independentemente de$form_state['redirect']
estar indefinida ou FALSE. No entanto, caso não tenha sido definida e a solicitação atual contenha uma string de consulta 'destination',drupal_goto()
será redirecionada para o destino especificado. Somente a configuração$form_state['redirect']
paraFALSE
impedirá qualquer redirecionamento.$form_state['no_redirect'] === TRUE
: Quando definido, o retorno de chamada que originalmente criou o formulário proíbe explicitamente qualquer redirecionamento, independentemente do valor de redirecionamento$form_state['redirect']
. Por exemplo,ajax_get_form()
define$form_state['no_redirect']
ao criar um formulário em um retorno de chamada AJAX para impedir qualquer redirecionamento.$form_state['no_redirect']
NÃO deve ser alterado pelas funções do construtor de formulários ou pelos manipuladores de validação / envio de formulários.$form_state['programmed'] === TRUE
: significa que o envio do formulário geralmente era chamado viadrupal_form_submit()
, portanto, qualquer redirecionamento interromperia o script chamadodrupal_form_submit()
.$form_state['rebuild'] === TRUE
: significa que o formulário precisa ser reconstruído sem redirecionamento.fonte
Para o Drupal 7, tentei isso em um módulo personalizado e funciona. Também pode ser usado em um tema:
BTW, encontrei este trecho aqui: https://gist.github.com/postrational/5768796
fonte
Para redirecionar para uma URL externa no Drupal 8, use a
TrustedRedirectResponse
classe, como no código a seguir.fonte
use
palavra - chave e seu espaço para nome:use Drupal\Core\Routing\TrustedRedirectResponse;
No D8 eu fiz assim (mas isso não vai funcionar ... veja abaixo):
Editar/
Faltava que setRedirect / setRedirectUrl funcionasse APÓS o módulo ser enviado, portanto, esta é minha solução de trabalho no D8:
Espero que isso possa ajudar
fonte
Para o drupal 7, se você deseja redirecionar para url com parâmetros como
someurl?param1=1¶m2=2
fonte