7

当用户尝试在 Drupal 7 中删除节点时,如何完成跳过验证?我以以下方式调用我的自定义验证函数:

function my_issue_form_alter(&$form, &$form_state, $form_id) {
    switch ($form_id) {
        case 'my_issue_node_form':{
            $form['#validate'][] = 'my_issue_node_form_validate';
            break;
        }
    }
}

function my_issue_node_form_validate($form, &$form_state) {
    //custom validation done here
}

我已经环顾了几天,大多数可能的解决方案都在考虑开发人员正在创建一个自定义表单,而我不是。

提前感谢任何提示/建议。

4

5 回答 5

4

很好的问题,这已经困扰了我多年,我什至没有意识到。这样的事情应该这样做:

function my_issue_form_my_issue_node_form_alter(&$form, &$form_state, $form_id) {
  // Make sure it's an edit form.
  if (!empty($form['nid']['#value'])) {
    // The nid is required for the delete confirmation form.
    $form['actions']['delete']['#limit_validation_errors'] = array(array('nid'));
  }

  $form['#validate'][] = 'my_issue_node_form_validate';
}
于 2013-08-02T18:02:18.347 回答
2

我认为这里的关键点是节点。如果我是你,请查看 hook_node_validate() 我会看到堆栈并找到它。

当你有更新时告诉我。

于 2013-08-02T17:29:37.227 回答
0

我的解决方案是对我的原始代码进行简单修改,在我的自定义验证函数中添加以下行,以仅在操作未被删除时进行验证。

//Set current operation
$currOp = $form_state['values']['op'];

//If not deleting, validate
if($currOp != "Delete"){
    //validate code here.
}

回复的人,谢谢指点!

于 2013-08-05T16:51:05.447 回答
0

对于节点编辑表单,要删除删除提交按钮上的验证,只需在您的自定义模块中为文章内容类型节点编辑表单编写以下代码。

function module_name_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'article_node_form') {
    if (!empty($form['nid']['#value'])) {
      // The nid is required for the delete confirmation form.
      $form['actions']['delete']['#limit_validation_errors'] = array(array('nid'));
    }
  }
}
于 2017-05-14T14:10:06.747 回答
0

如果您使用的是实体 api,则表单验证也适用于删除操作的必填字段。即使您使用自己的函数来验证表单(your_form_name_form_validate),drupal 也不允许您提交带有空字段的表单。

那是因为drupal_validate_form()your_form_name_form_validate在调用之前验证表单。

drupal_validate_form必须在任何表单验证函数之前调用,因为它验证表单令牌。但随后它会调用 _form_validate(),并且不会让您提交带有空必填字段的表单。

就我而言,我无能为力,因为我使用一种形式进行编辑/创建/删除操作。但是如果您使用不同的表单,可能在删除操作上您可以设置

$form['your_field_name']['#validated'] = TRUE;

_form_validate 函数不会验证该字段。

于 2017-08-19T11:47:36.513 回答