O que estou tentando fazer não funciona, ainda sou redirecionado para / node / {id}:
function hook_form_alter(&$form, $form_state, $form_id) {
$form['actions']['submit']['#submit'][] = 'callback_set_redirect';
}
function callback_set_redirect($form, FormStateInterface $form_state) {
$form_state->setRedirect('custom.landing.page');
}
8
redirection
olsav
fonte
fonte
If saving is an option, privileged users get dedicated form submit buttons to adjust the publishing status while saving in one go. @todo This adjustment makes it close to impossible for contributed modules to integrate with "the Save operation" of this form. Modules need a way to plug themselves into 1) the ::submit() step, and 2) the ::save() step, both decoupled from the pressed form button.
Respostas:
Basicamente, o código funcionará apenas para a ação de envio, mas o formulário drupal de salvamento do nó tem muitas ações, acho que você teria feito o login como administrador e tentado, depois siga o código abaixo.
se você quiser que isso funcione para outras ações também, isso significa fazer login como administrador e ver o botão salvar nó, você terá a opção "salvar e publicar", "salvar e cancelar a publicação". como mencionado
fonte
Usando hook_form_alter, você precisará fazer duas coisas
1) verifique se é um formulário de nó 2) adicione um manipulador de envio personalizado a cada botão de envio.
Em seguida, para a função de envio, você pode usar qualquer lógica que desejar. Você pode comparar com o NodeForm :: save, onde ele envia você para a página do nó canônico ou para a página inicial com base nas permissões de acesso do usuário atual.
Se você quiser alterar esse comportamento para que ele permaneça no formulário do nó atual, faça o seguinte:
Se você deseja usar sua página de destino personalizada, basta substituir o redirecionamento pelo código que já está usando:
Observe que isso não será substituído quando houver um parâmetro $ _GET de "destino", como na página / admin / content.
Para remover o parâmetro de destino da página / admin / content, desmarque a caixa de seleção "destination" em "Content: Links de operações (operações)" nos campos de exibição.
fonte
Tive sucesso usando o Symfony RedirectResponse:
fonte
Não consigo encontrar nada de errado com o código original, então provavelmente algo está errado. Isso funciona bem para mim.
No entanto,
custom.landing.page
deve haver uma rota definida e os parâmetros (se houver) precisam ser passados da seguinte forma:Consulte FormState :: setRedirect () para obter detalhes.
fonte
Eu sempre uso o módulo Redirecionamento de economia de nó para essa funcionalidade. Ele adiciona uma opção a um tipo de conteúdo que diz "o que fazer depois de salvar novo conteúdo".
fonte