作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
集成property validation,和集成Field validation的过程其实是一样的。首先是我们在后台配置验证规则,然后将其导出成代码,这和后面所讲的将Views的代码导出,是一样的。
启用Property validation模块以后,导航到admin/structure/property_validation:
这是Ctools的Export UI提供的一个默认界面,Property validation模块自带了一个验证规则title_min_words。我们这里添加两个验证规则,具体配置如下:
唯一性验证规则:
Name(机读) |
breadcrumb_path_unique |
Rule Name(用户可读) |
Breadcrumb path unique |
Entity type |
Breadcrumb |
Bundle name |
Breadcrumb |
Property name |
path |
Validator |
Unique values |
Scope of unique |
Entity |
Custom error message |
Breadcrumb path should be unique. |
URL有效性验证规则:
Name(机读) |
breadcrumb_path_valid_path |
Rule Name(用户可读) |
Breadcrumb path valid path |
Entity type |
Breadcrumb |
Bundle name |
Breadcrumb |
Property name |
path |
Validator |
URL |
Internal path |
选中 |
Custom error message |
Breadcrumb path should be a valid path. |
现在,我们通过breadcrumb/add,添加面包屑,发现验证规则不起作用,比如第一次将path输入为“node/1”,第二次还是输入“node/1”,唯一性验证不起作用。此外,输入一个不存在的路径,比如“admin1”,还是可以直接保存。但是编辑的时候就会报错。经检查,并不是,property validation模块的问题,而是我们自己这里代码写的有问题。我们对breadcrumb2.admin.inc文件里面的breadcrumb2_form_validate函数,做以下修改:
function breadcrumb2_form_validate($form, &$form_state) {
$breadcrumb = $form_state['breadcrumb'];
$breadcrumb->path = $form_state['values']['path'];
// Notify field widgets to validate their data.
field_attach_form_validate('breadcrumb2', $breadcrumb, $form, $form_state);
}
粗体字部分,为我们新增的代码。我们把$breadcrumb对象存储在了$form_state['breadcrumb']里面,但是这里的值,都是旧的,我们这里验证的时候,需要将属性的值重新设置一下。field_attach_form_validate能够自动的提取当前字段的值,对于属性的值,我们需要单独的设置。这就是粗体字代码的含义。
修正这个错误以后,重新测试,现在这两个验证规则,都起作用了。唯一不足的时候,URL支持的内部路径,没有将别名排除出去,不过这个影响不大。