我在/ admin / reports / status页面上收到以下提及通知。
如何解决通知?
答案 0 :(得分:1)
函数unserialize()无法将序列化值转换回PHP值,因为存储的数据表示中的长度(或长度不匹配)无效。
这意味着字段记录未正确存储在其字段表中。
第二个通知告诉我们通过text_field_schema()
调用的被控制字段hook_field_schema
的类型,公开了三种字段类型:text
,text_long
,{{1 }}。
text_with_summary
就在第388行上方,你得到了这个:
// line 392 of modules/field/field.crud.inc
$schema = (array) module_invoke($field['module'], 'field_schema', $field);
通过实现此钩子,您应该能够指出哪条记录被破坏了:
module_invoke_all('field_read_field', $field);
一旦确定,您可能需要修复"通过FieldAPI保存之前的字段结构,例如:
function yourmodule_field_read_field($field) {
if ($field['module'] === 'text' && !isset($field['settings'])) {
dpm($field);
}
}
结构应如field_create_field()中所定义。
[编辑]
如果您不能使用字段API,那么您应该能够看到该字段的哪条记录被破坏了。
致电$field += array(
'settings' => array(
'max_length' => $somelength
)
);
field_update_field($field);
并调试:
field_read_field($field_name)
应在第一次通知之前打印损坏的记录(如果显示)。
检查序列化值(// line 370 of modules/field/field.crud.inc
$fields = array();
$results = $query->execute();
foreach ($results as $record) {
dpm($record); // check $record['data']
$field = unserialize($record['data']);
// ...
}
),并将其与其他记录进行比较,看看有什么不对。最后,如果您不能使用字段API,则可能必须使用SQL语句更新字段。