Php Drupal CCK字段不使用hook_nodeapi进行验证

Php Drupal CCK字段不使用hook_nodeapi进行验证,php,validation,drupal,cck,Php,Validation,Drupal,Cck,我试图在DrupalCCK中对链接字段进行自定义验证。 我目前正在使用链接模块。 所以在我的hook_nodeapi和case validate中 请注意,此值接受无限制值,因为存在foreach case 'validate': if ($node->type == 'flow') { foreach ($node->field_post_twitter as $twitter_v) { $pattern = '/

我试图在DrupalCCK中对链接字段进行自定义验证。 我目前正在使用链接模块。 所以在我的hook_nodeapi和case validate中 请注意,此值接受无限制值,因为存在foreach

case 'validate':  
  if ($node->type == 'flow')  
  {  
      foreach ($node->field_post_twitter as $twitter_v)  
      {  
        $pattern = '/(http|https|ftp):[\/]{2}twitter\.com/i';  
          if (preg_match_all($pattern, $twitter_v['url']))  
          {  
            form_set_error('not working');  
          }  
       }  
  }  
break; 
但它不是验证,而如果我把它放在一个普通的php文件中,它确实可以工作。 你知道我遗漏了什么吗


谢谢

尝试将数据库中的
系统
表中的模块权重设置为最高,这样钩子将在最后调用,并且所有CCK字段(包括您案例中可能尚未填充的(field_post_twitter))都已填充


毕竟不要忘记清除缓存(drush cc)。

您应该使用hook\u form\u alter更改当前表单的验证数组,并将自定义验证函数添加到此数组中

function mymodule_form_alter(&$form, &$form_state, $form_id){
  switch($node->type){
    case 'test_node_form':
      $form['#validate'][] = 'my_custom_validate';
      break;
  }
}

function my_custom_validate($form, &$form_state){
  $values = $form_state['values'];
  if(/* conditions */){
    $message = t('Oops!');
    form_set_error('', $message);
  }
}

由于PHP缺乏跟踪,您可以在代码中添加一些“var_dumps()”,从高到低查看代码是否实际运行。或者,安装devel模块并将var_dump替换为
dvm()
和devel模块提供的此类帮助程序。“从高到低”的意思是:检查模块是否被加载,然后检查函数是否被调用,然后检查foreach是否运行等等。