Có hai cách để tải một biểu mẫu bằng cách sử dụng một tuyến đường. Bạn có thể tải lên một cuộc gọi lại tải một biểu mẫu và trả về nó như là một phần của mảng xây dựng hoặc bạn có thể tải trực tiếp biểu mẫu bằng cách đặt tham số _form theo mặc định.
Bạn có thể tìm kiếm cơ sở mã để tìm các ví dụ hoạt động, sao chép chúng vào mymodule.routing.yml, chỉnh sửa chúng theo nhu cầu của bạn và sau đó xây dựng lại bộ đệm.
Đang tải mẫu từ gọi lại:
Có một ví dụ hoạt động trong mô-đun liên hệ:
/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+
Sau đó, trong /core/modules/contact/src/Controll/ContactControll.php
bạn có thể xem ví dụ về cách tải biểu mẫu trong cuộc gọi lại:
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;
}
Tải mẫu trực tiếp từ tuyến đường:
Nếu bạn muốn tải biểu mẫu trực tiếp bằng cách sử dụng mặc định _form, có một ví dụ trong mô-đun phím tắt tại /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+
Trong trường hợp này, người dùng được chuyển vào dưới dạng tham số cho biểu mẫu, xem /core/modules/shortcut/src/Form/SwitchShortcutSet.php
public function buildForm(array $form, FormStateInterface $form_state, UserInterface $user = NULL) {