我在Drupal中创建了一个ModalDialog,其中包含如下两种形式,
public function signUpForm() {
$response = new AjaxResponse();
// Get the modal form using the form builder.
$modal_form[] = $this->formBuilder->getForm('Drupal\signup_form\Form\SignupForm');
$modal_form[] = $this->formBuilder->getForm('Drupal\signup_form\Form\SigninForm');
// Add an AJAX command to open a modal dialog with the form as the content.
$response->addCommand(new OpenModalDialogCommand('', $modal_form, ['width' => '800','dialogClass' => 'signup-modal']));
return $response;
}
呈现了表格,但是问题是,两个表格都提交给相同的功能。我无法更改表格的操作。 是否有任何可用选项将表单操作更改为自定义网址?
答案 0 :(得分:0)
您需要更改这些格式,以便可以添加自己的提交处理程序(并删除不需要的处理程序),最终从那里您将能够设置适当的重定向或AjaxResponse
。
例如,对于每种形式,请通过自定义模块实现hook_form_alter
:
function MODULE_signup_form_alter(&$form, FormStateInterface $form_state, $form_id) {
$form['actions']['submit']['#attributes']['class'][] = 'use-ajax-submit';
$form['actions']['submit']['#submit'][] = 'MODULE_signup_form_ajax_submit';
}
然后添加适当的提交处理程序,例如。 :
function MODULE_signup_form_ajax_submit(array $form, FormStateInterface &$form_state) {
$response = new AjaxResponse();
$form-class = '.signup-form'; # using your own selector
$selector = '#drupal-modal' . ' ' . $form-class;
$message = '<div>submitted</div>';
$response->addCommand(new ReplaceCommand($selector, $message));
$form_state->setResponse($response);
}
我假设您想更新模式内容,以便仍然可以提交第二个表单,因此在这里我将'use-ajax-submit'
类(参见Drupal.behaviors.AJAX
)添加到适当的$ form操作属性中,因此提交响应也可以在模式中呈现。还使用ReplaceCommand
用一条简单的消息替换提交的表单内容。
如果相反,第一个提交的表单应该触发重定向,则不要使用setResponse()
(实际上会取消重定向),如果基本操作网址不是您想要的URL,请不要使用setRedirect()