it-swarm.com.de

Wie rendere ich ein Formular?

Was ist die Alternative zu drupal_get_form('user_login'). in Drupal 8?

Ich verwende den folgenden Code in theme_name.theme, aber es funktioniert nicht.

// Include namespace for userLoginForm.
use \Drupal\Core\core\modules\user\src\Form;

function MYTHEMENAME_preprocess_page(&$variables) {
  $form = UserLoginForm::create();
} 
21
Kamal Oberoi

drupal_get_form() wurde durch den Form Builder-Dienst ersetzt, z.

$form = \Drupal::formBuilder()->getForm(\Drupal\user\Form\UserLoginForm::class);

Weitere Informationen finden Sie unter Änderungsdatensatz .

Eigentlich nicht - dieser Änderungsdatensatz ist falsch. Sie werden aufgefordert, die Formular-ID zu übergeben, wenn Sie tatsächlich die Klassenzeichenfolge übergeben müssen.

33
Clive

Sie können ein Formular im Formularordner erstellen. Und dann können Sie Ihr Formular überall aufrufen und den Parameter wie gezeigt übergeben.

Drupal 7: $form = drupal_get_form('form_id',$parameter);

Drupal 8: $form = \Drupal::formBuilder()->getForm('Drupal\custom_module\Form\CustomModuleForm',$parameter);

15
Shreya Shetty

Es gibt zwei Möglichkeiten, ein Formular zurückzugeben (D8) oder zu rendern (D7). Dies sind \Drupal::formBuilder()->getForm und Drupal::formBuilder()->buildForm. ich benutze \Drupal::formBuilder()->getForm wie nachstehend.

Verwenden Sie dies, wenn du gehst nicht vorbei ein Parameter:

$form = \Drupal::formBuilder()->getForm('\Drupal\example\Form\ExampleForm');
return $form;

Verwenden Sie dies, wenn du gehst vorbei ein Parameter:

$parameter = "your_parameter";
$form = \Drupal::formBuilder()->getForm('\Drupal\example\Form\ExampleForm', $parameter);
return $form;
//pass to formbuild function
public function buildForm(array $form, FormStateInterface $form_state, $parameter = NULL){//form code}

$parameter = 'your_parameter';
$form = drupal_get_form('form_id', $parameter);
print drupal_render($form);
//pass to form function
function form_id ($form, &$form_state, $parameter){//form code}

Prost. Lassen Sie mich wissen, ob es hilft.

6

Die Dokumentation erlaubt auch eine Instanz der Klasse. Damit

$formObj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($formObj);

ist auch richtig.

2
MICHAEL MWEBAZE

Ok, wenn alles andere hier fehlschlägt, ist dies ein hinterhältiger Trick, indem ein neues Formularstatusobjekt festgelegt wird.

use Drupal\Core\Form\FormState;
...

$form_state = new FormState();
$form_state->set('name', $name);
$form_state->set('user', $user);
$render_array = \Drupal::formBuilder()->buildForm('\Drupal\mod\Form\MyForm', $form_state);
...
// Example render.
$response = new AjaxResponse();
// Show a dialog box.
$dialogText['#attached']['library'][] = 'core/drupal.dialog.ajax';
$response->addCommand(new OpenModalDialogCommand("Dialog Title", $render_array, ['width' => '300']));
return $response;

... dann können Sie in Ihrer Formularmethode buildForm ...

 // Get form state.
 $name = $form_state->get('name');
 if (!empty($name)) {
    $form['name'] = [
      '#type' => 'item',
      '#markup' => $name,
    ];
  }
0
Taggart Jensen

Angenommen, das Folgende ist Ihre Formularklasse

namespace Drupal\demo\Form;
use \Drupal\Core\Form\FormBase;
class MyForm extends FormBase {
}

Sie müssen zuerst eine neue Instanz aus Ihrer Formularklasse erstellen und diese an getForm von formBuilder übergeben.

$form_obj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($form_obj);
0
Muhammad Reda