Form gönderildikten sonra yeniden yönlendir


15

Drupal 8'de özel Form oluşturuyorum, Drupal 7'de $form_state['redirect'] = 'mycustompath';özel gönderme işleyicisinde ayarlanmış özel yola yeniden yönlendirebileceğimizi hatırlıyorum , ancak Drupal 8'de Form gönderildikten sonra Kullanıcıyı nasıl yeniden yönlendirebilirim?

submitFormYöntemi kullanmam gerektiğini biliyorum :

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

Yanıtlar:


30

"SubmitForm" yönteminizde aşağıdaki kodu yazın

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

machine_nameyönlendirme dosyasında belirtilen makine adı nerede .

Umarım bu yardımcı olur .. :)


çalışmıyor. Özel rotamı deniyorum $form_state->setRedirect('/start');return;, diyelim ki ana sayfaya yönlendirmek istiyorum. tam snippet nedir?
Yusef

1
$ form_state-> setRedirect ( '<ön>'); dönüş;
parth.k

'/ start' olmamalıdır. Yönlendirme dosyasında belirtilen takma addır.
parth.k

'<front>'yol takma adı hakkında ne çalıştın? bu benim tcdev.content: path: '/start' defaults: _controller: 'Drupal\tcdev\Controller\TrainingCenterController::content' _title: 'Start Training Center' requirements: _permission: 'access content'
rotam

$ Form_state-> setRedirect ('tcdev.content') olmalıdır;
parth.k

8

Yapı biçiminde ayarlamak istiyorsanız, gibi bir yönlendirme yolu kullanmanız gerekir.

use Drupal\Core\Url;

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

Url'nin ad alanı nedir? Url' not found
Yusef

olmalı use Drupal\Core\Url;(önceki eğik çizgi olmadan)
ummdorian

$form_state->setRedirectUrl($url);sendForm () içinde de kullanılabilir.
Shaun Dychko

API'yı kontrol edin: api.drupal.org/api/drupal/… . setRedirect () sadece rotayı önce bir URL'ye dönüştürür, sonra setRedirectUrl () öğesini çağırır.
imclean

0

Kullanıcı düzenleme formunu ana sayfaya veya başka bir sayfaya yönlendirmek istiyorsanız aşağıdaki kodu izleyin.

İlk olarak, kanca ekle - 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';
  } 
}

kanca ekledikten sonra aşağıdaki işlevi ekleyin

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

Umarım bu yardımcı olur.


Bu, işleyicinizden sonra ateşlenmesi gereken tüm gönderme işleyicilerini atlamaz mı?
joekers

$form_state->setRedirect()Diğer tüm gönderme işleyicilerinin işlenebilmesi için yalnızca gönderme formunda olmanız gerekir .
joekers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.