作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
这是field_validation.install文件的:
<?php
/**
* @file
* field_validation installation file
*/
/**
* Implements hook_schema().
*/
function field_validation_schema() {
$schema['field_validation_rule'] = array(
'description' => 'Stores rule definitions',
'fields' => array(
'ruleid' => array(
'type' => 'serial',
'description' => 'Unique identifier for a rule',
'unsigned' => TRUE,
'not null' => TRUE,
),
'rulename' => array(
'type' => 'varchar',
'description' => 'Name for the rule',
'not null' => TRUE,
'default' => '',
'length' => 255,
),
'field_name' => array(
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => ''
),
'entity_type' => array(
'type' => 'varchar',
'length' => 32,
'not null' => TRUE,
'default' => ''
),
'bundle' => array(
'type' => 'varchar',
'length' => 128,
'not null' => TRUE,
'default' => ''
),
'validator' => array(
'type' => 'varchar',
'description' => 'The validator key',
'not null' => TRUE,
'default' => '',
'length' => 255,
),
'data' => array(
'type' => 'varchar',
'description' => 'Additional rule data',
'not null' => FALSE,
'length' => 255,
),
'error_message' => array(
'type' => 'varchar',
'description' => 'Rule error message',
'not null' => FALSE,
'length' => 255,
),
),
'primary key' => array('ruleid'),
'indexes' => array(
'field_name_bundle' => array('field_name', 'entity_type', 'bundle'),
),
);
return $schema;
}
我们来看install文件,这里面的代码很简单,就是用来创建一个数据库表,为数据库表定义了它可以包含那些列,以及数据库表的主键、索引。中国人的抄袭、模仿的能力是比较强的,我也是中国人麻,直接把webform_validation.install里面的代码复制了过来。当然,我做了取舍。webform_validation里面定义了两个数据库表,而我这里只定义了其中的一个,为什么?为什么我没有允许一个规则可以应用到多个字段上面来,就像webform validation里面的那样,一个规则可以应用到多个webform component(组件)上面来?
如果最初这样设计的话,也是可以的,但是我主要考虑到webform component都是单值的,而字段可以是单值的,也可以是多值的,还可以是复合字段,也就是说字段远比webform component复杂。如果一个规则对应多个字段的话,程序会很复杂。而一个规则对应一个字段的话,程序会简单很多。
后来,有很多人,提出来了,如果一个规则能够支持多个字段,就好了,但是一直都没有实现,因为牵涉到的东西太多。而一个规则应用到一个字段的话,实现以后,只需要复制一下,就可以将它应用到多个字段了。简单的,就是好的。在这个问题上,我的想法是正确的。