Ada dua cara untuk memuat formulir menggunakan rute. Anda bisa memuat panggilan balik yang memuat formulir dan mengembalikannya sebagai bagian dari susunan bentukan, atau Anda bisa memuat formulir secara langsung dengan mengatur parameter _form di bawah default.
Anda dapat mencari basis kode untuk menemukan contoh yang berfungsi, menyalinnya ke mymodule.routing.yml Anda, mengeditnya sesuai kebutuhan Anda dan kemudian membangun kembali cache.
Memuat formulir dari panggilan balik:
Ada contoh yang berfungsi di modul kontak:
/core/modules/contact/contact.routing.yml
entity.user.contact_form:
path: '/user/{user}/contact'
defaults:
_title: 'Contact'
_controller: '\Drupal\contact\Controller\ContactController::contactPersonalPage'
requirements:
_access_contact_personal_tab: 'TRUE'
user: \d+
Kemudian di /core/modules/contact/src/Controller/ContactController.php
Anda dapat melihat contoh cara memuat formulir di callback:
public function contactPersonalPage(UserInterface $user) {
// Do not continue if the user does not have an email address configured.
if (!$user->getEmail()) {
throw new NotFoundHttpException();
}
$message = $this->entityManager()->getStorage('contact_message')->create(array(
'contact_form' => 'personal',
'recipient' => $user->id(),
));
$form = $this->entityFormBuilder()->getForm($message);
$form['#title'] = $this->t('Contact @username', array('@username' => $user->getDisplayName()));
$form['#cache']['contexts'][] = 'user.permissions';
return $form;
}
Memuat formulir langsung dari rute:
Jika Anda ingin memuat form secara langsung menggunakan default _form, ada contoh di modul shortcut di /core/modules/shortcut/shortcut.routing.yml
shortcut.set_switch:
path: '/user/{user}/shortcuts'
defaults:
_form: 'Drupal\shortcut\Form\SwitchShortcutSet'
_title: 'Shortcuts'
requirements:
_custom_access: 'Drupal\shortcut\Form\SwitchShortcutSet::checkAccess'
options:
_admin_route: TRUE
user: \d+
Dalam hal ini, pengguna dilewatkan sebagai parameter ke formulir, lihat /core/modules/shortcut/src/Form/SwitchShortcutSet.php
public function buildForm(array $form, FormStateInterface $form_state, UserInterface $user = NULL) {