You are here

3 导出property validation验证规则

admin 的头像
Submitted by admin on 星期四, 2015-09-17 02:25

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

我们回到admin/structure/property_validation,对于每个验证规则,它右边都有一组操作链接,默认为编辑,我们展开所有的操作链接,点击导出(Export)链接。下面是唯一性验证导出后的代码:

$rule = new stdClass();

$rule->disabled = FALSE; /* Edit this to true to make a default rule disabled initially */

$rule->api_version = 2;

$rule->rulename = 'Breadcrumb path unique';

$rule->name = 'breadcrumb_path_unique';

$rule->property_name = 'path';

$rule->entity_type = 'breadcrumb2';

$rule->bundle = 'breadcrumb2';

$rule->validator = 'property_validation_unique_validator';

$rule->settings = array(

  'data' => 'entity',

);

$rule->error_message = 'Breadcrumb path should be unique.';

    我们这里的导出,是基于CroolsExport插件功能的。可能读到这里的时候,很多人会问,Crools是怎么智能的导出代码呢?有兴趣的可以阅读以下ctools\includes\export.inc里面的ctools_export_object函数,这个函数负责导出对象。我开始的时候,对这个导出机制也理解的不是很透彻,后来阅读了这个函数的源代码,才知道有些东西是怎么来的,在哪里定义的。

接着,我们在module文件里面,追加以下代码:

/**

 * Implementation of hook_ctools_plugin_api().

 *

 * Tell Ctools that we support the default_property_validation_rules API.

 */

function breadcrumb2_ctools_plugin_api($owner, $api) {

  if ($owner == 'property_validation' && $api == 'default_property_validation_rules') {

    return array('version' => 2);

  }

}

这里我们实现了hook_ctools_plugin_api,通过这个钩子函数,我们告诉Ctools,我们实现了默认的property_validation验证规则,如果你熟悉了钩子函数以后,你发现所有的钩子函数都是很类似的,这里也一样。钩子函数里面的逻辑通常都比较简单。

接下来,我们新建一个breadcrumb2.default_property_validation_rules.inc文件,在里面添加以下代码:

<?php

 

/**

 * @file

 * Provides default property validation rules for breadcrumb path.

 */

 

/**

 * Implementation of hook_default_property_validation_rule().

 * 

 * Provide default validation rules.

 */

function breadcrumb2_default_property_validation_rule() {

  $export = array();

 

  $rule = new stdClass();

  $rule->disabled = FALSE; /* Edit this to true to make a default rule disabled initially */

  $rule->api_version = 2;

  $rule->rulename = 'Breadcrumb path unique';

  $rule->name = 'breadcrumb_path_unique';

  $rule->property_name = 'path';

  $rule->entity_type = 'breadcrumb2';

  $rule->bundle = 'breadcrumb2';

  $rule->validator = 'property_validation_unique_validator';

  $rule->settings = array(

    'data' => 'entity',

  );

  $rule->error_message = 'Breadcrumb path should be unique.';

  $export['breadcrumb_path_unique'] = $rule;

  

  $rule = new stdClass();

  $rule->disabled = FALSE; /* Edit this to true to make a default rule disabled initially */

  $rule->api_version = 2;

  $rule->rulename = 'Breadcrumb path valid path';

  $rule->name = 'breadcrumb_path_valid_path';

  $rule->property_name = 'path';

  $rule->entity_type = 'breadcrumb2';

  $rule->bundle = 'breadcrumb2';

  $rule->validator = 'property_validation_url_validator';

  $rule->settings = array(

    'external' => 0,

    'internal' => 1,

  );

  $rule->error_message = 'Breadcrumb path should be a valid path.';

  $export['breadcrumb_path_valid_path'] = $rule;

  

  return $export;

}

通过钩子hook_default_property_validation_rule可以定义验证规则。这个钩子函数里面,代码都是我们使用Ctools导出来的,将导出的代码,复制过来的时候,我们需要稍微的调整一下代码格式。

现在我们清除缓存,重新回到admin/structure/property_validation,此时右边的操作链接里面,删除delete)链接没有了,换成了恢复(revert):

图片3.png 

     而在存储(Storage)里面,也显示的是“Overridden”了。如果我们恢复(Revert)一下,“Overridden”就变成“Default”了。这里的配置和Views里面是一致的。

Field validation模块,正在日趋流行,但是安装量还没有达到34万的规模,之所以集成它,主要为了大家展示一下Ctools导出插件的具体应用,另外老葛也希望,Breadcrumb2这个模块可以为Field validation模块带来更多的安装量。我们下面来看看Views的集成,这是项目中经常用的。


Drupal版本: