我正在尝试在Drupal Commerce中编辑结帐表单,以要求用户两次输入其电子邮件地址。当他们提交表单时,Drupal应该检查电子邮件是否匹配,如果不匹配,则调用form_set_error()。现在,我只是试图将自定义验证功能附加到表单上,而我无法使用它。 (我的模块称为checkout_confirm_email。该模块仅供我们自己使用,因此我在名称上并没有花太多力气)。

function checkout_confirm_email_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'commerce_checkout_form_checkout') {
    $form['#validate'][] = 'checkout_confirm_email_form_validate';
    dprint_r($form['#validate']);
    dsm("I printed");
}
}

function checkout_confirm_email_form_validate($form, &$form_state) {
    dsm("Never prints...");
}
dprint_r语句输出Array ([0] => checkout_confirm_email_form_validate)。因此,该函数是表单数组的一部分,但是验证函数中的dsm语句从不打印。

我实际上已经被卡住了一段时间了。我查看了示例,但看不到我做错了什么。任何人?

最佳答案

您需要将#validate属性附加到表单提交按钮,如下所示:

$form['submit']['#validate'][] = 'checkout_confirm_email_form_validate'

这样就可以了,那么我的示例就不必与表单树完全匹配了,您应该搜索“提交”按钮数组并将其应用于该示例

09-16 02:20