表单提交后重定向


15

我在Drupal 8中创建了自定义表单,我记得我们可以使用$form_state['redirect'] = 'mycustompath';在自定义提交处理程序中设置的重定向到Drupal 7 中的自定义路径,但是在Drupal 8中提交表单后如何重定向用户?

我知道我应该使用submitForm方法:

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

Answers:


30

在您的“ submitForm”方法中,编写以下代码

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

machine_name路由文件中提到的计算机名称在哪里。

我希望这有帮助 .. :)


不行。我尝试我的自定义路线$form_state->setRedirect('/start');return;,让我们假设我想重定向到主页。什么是确切的代码段?
优素福

1
$ form_state-> setRedirect('<front>'); 返回;
parth.k,2016年

它不应该是'/ start'。它是路由文件中提到的别名。
parth.k,2016年

'<front>'工作你对路径别名有什么看法?这是我的路线tcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
优素福

它应该是$ form_state-> setRedirect('tcdev.content');
parth.k,2016年

8

如果要设置为buildform,则需要使用一些路由路径。

use Drupal\Core\Url;

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

Url的命名空间是什么? Url' not found
优素福

应该是use Drupal\Core\Url;(没有前面的斜杠)
ummdorian

$form_state->setRedirectUrl($url);也可以在SubmitForm()中使用。
Shaun Dychko '17

检查API:api.drupal.org/api/drupal/...。setRedirect()只是先将路由转换为URL,然后调用setRedirectUrl()。
干净

0

如果要将用户编辑表单重定向到主页或其他页面,请遵循以下代码。

首先,添加钩子-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';
  } 
}

添加钩子后添加以下功能

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;
}

希望对您有所帮助。


这不是绕过所有应该在处理程序之后触发的提交处理程序吗?
joekers

您应该只$form_state->setRedirect()在表单中提交,以便可以处理所有其他提交处理程序。
joekers
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.