8 field_validation_menu

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
field_validation_menu里面,最上面的那段代码,是我从field_ui模块里面复制过来的,最后实现UI的时候,考虑到字段的配置,它的路径不是固定的,不同实体类型的路径是不同的,而我的验证规则,是追加到字段上面去的,所以只好从field_ui模块复制代码。如果让我自己写,我是写不出来的。这里只需要理解就可以了,知道这段代码的出处。通过Hook_menu,我们为每个字段提供了一个验证概览页面,一个验证规则的添加页面,一个验证规则的编辑页面,还有验证规则的删除页面。除了这里的路径是动态的以外,并不比我们见到的其它菜单项复杂。

Drupal版本:

7 include_once

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
最上面的两个include_once,用来将文件field_validation.validators.inc和field_validation.rules.inc加载进来,当加载field_validation.module文件的时候,就会自动的加载这两个文件。为什么要把它分成多个文件呢?这样做唯一的好处就是,逻辑更清楚一点,比如field_validation.validators.inc只放置验证器的定义。它并不能实现缓加载,也并不能提升性能。如果我们把field_validation.validators.inc里面的函数,直接放到module文件中,效果是一样的。很多模块都采用这种方式,或许有的人认为,它能够实现缓加载,但是实际是不行的。

Drupal版本:

6 field_validation_field_attach_validate

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
这里面,最先实现的是field_validation_field_attach_validate,在这个钩子函数中,alpha1版本里面包含两大段注释代码,最下面的那段注释代码,就是我最初测试hook_field_attach_validate所用到的代码,在这个版中还保留着,幸好还保留着,这样可以留下一个成长的轨迹。最上面那段注释里面的代码,是最初的实现代码。把它的格式整理一下:

Drupal版本:

3 info文件

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
我们来看一下,最初的代码,这是info文件的:

Drupal版本:

2 Field validation的Alpha1版

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
​我在hook_field_attach_validate的实验成功以后,便开始寻求更一般的解决办法了。当时章林已经使用form_alter解决这个问题了,我同时也告诉了他在Drupal7下面,可以采用hook_field_attach_validate来解决这样的问题。如果仅仅是为了满足项目的需要,这个问题就可以这样结束了。每当我们遇到字段验证的时候,套用已有的代码,改造改造就可以了。

Drupal版本:

1 最初的解决办法

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

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
但是项目中的实际问题,还是需要解决的。在实际的项目中,章林选择是用了form_alter来解决这个问题。Form_alter我们在前面,Think in Drupal第一集里面的第一章讲的就是这个钩子,它是非常有用的,在这里解决这个问题也是非常有效的。首先确定实体表单的ID,然后通过form_alter为这个表单添加一个验证回调函数,在自己的验证函数里面添加自己的逻辑。原有的代码已经找不到了,我在网络上找了段类似的代码,做了一下改造:

Drupal版本:

页面

Subscribe to Think in Drupal RSS