You are here

4 field_validation.install文件

admin 的头像
Submitted by admin on 星期六, 2015-09-19 01:24

作者:老葛,北京亚艾元软件有限责任公司,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复杂。如果一个规则对应多个字段的话,程序会很复杂。而一个规则对应一个字段的话,程序会简单很多。

后来,有很多人,提出来了,如果一个规则能够支持多个字段,就好了,但是一直都没有实现,因为牵涉到的东西太多。而一个规则应用到一个字段的话,实现以后,只需要复制一下,就可以将它应用到多个字段了。简单的,就是好的。在这个问题上,我的想法是正确的。


Drupal版本: