Em um dos meus formulários, estou tentando definir um $form_state['redirect']
para que o formulário vá para esse destino depois que o usuário clicar em um dos botões de ação.
Se eu inspecionar $form_state['redirect']
antes e depois de adicionar o redirecionamento, é NULL antes e depois contém a matriz adequada. Veja como estou configurando o redirecionamento:
$form_state['redirect'] = array(
'my/custom/path/' . $nid,
array('query' => drupal_get_destination()),
);
Quero preservar o destino do formulário que o usuário está visualizando para o próximo caminho (é por isso que estou ligando drupal_get_destination()
, que retorna uma matriz com o 'destination' => 'some/path/here'
interior.
Parece que, como já existe um destino no caminho do formulário atual, o formulário é redirecionado para esse destino, independentemente do que eu coloquei no meu próprio manipulador de envio de formulários (veja o código acima). Eu até tentei usar drupal_goto () e isso também não redirecionou o usuário.
fonte
Obrigado por isso, mas por algum motivo isso não funcionou quando eu tentei. Eu recebi um erro fatal - os dados enviados na resposta de exemplo acima não atendem aos requisitos de
drupal_goto()
Pode ser porque essa resposta é bastante antiga, mas eu consegui fazê-la funcionar com isso:
Eu sei que isso viola esta nota:
Mas, nesse caso, você definitivamente deseja substituir a variável. Você não definiria esse valor a menos que desejasse desconsiderar os valores definidos de outros módulos. Além disso, acho que você deve fazê-lo por causa da maneira como
drupal_goto()
funciona com o parâmetro de consulta. Também pode ser por isso que a resposta original estava lançando erros fatais no meu site.fonte
$form_state['redirect']
ou pode obter um WSOD com redirecionamentos concorrentes.definir formulário #action
fonte
drupal_goto()
emhook_node_insert()
vão estragar tudo (porquedrupal_goto()
chamadasdrupal_exit()
impedindo o novo nó de ser salvo).