【发布时间】:2012-10-05 23:56:28
【问题描述】:
我有一个自定义表单,它创建一个新用户并为该用户填写多个自定义字段。其中一个字段是自定义图像(不是系统头像图像)。
我可以通过表单将图像上传到服务器,但无法将其放入相应的字段。到目前为止,这是我的(自定义模块)代码。
function newacc_freebusiness_form($form, &$form_state) {
$form['bussimage'] = array(
'#title' => t('Upload an image that shows off your business.'),
'#type' => 'managed_file',
'#description' => t('Max size of 3Mb and filetype of jpg jpeg or png'),
'#upload_location' => 'public://bussimages/',
'#upload_validators' => array(
'file_validate_extensions' => array('png jpg jpeg'),
'file_validate_size' => array(3*1024*1024),
),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
$form['#validate'][] = 'newacc_freebusiness_validate';
return $form;
}
function newacc_freebusiness_validate($form, &$form_state) {
$bussimage = $form_state['values']['bussimage'];
$file = file_load($bussimage);
$bussimage = image_load($file -> uri);
image_save($bussimage);
$bussimage = image_load($file -> uri);
$edit = array(
'name' => 'name',
'mail' => 'mail@mail.com',
'status' => 0,
'language' => 'en',
'init' => 'mail@mail.com',
'roles' => array(8 => 'Promoter'),
'field_business_image' => array(
'und' => array(
0 => array(
'value' => $bussimage,
),
),
),
);
user_save(NULL, $edit);
}
这是抛出错误信息:
Notice: Undefined index: fid in file_field_presave() (line 219 of /var/www/drupal_site/modules/file/file.field.inc).
我现在已经尝试了很多技巧并且在谷歌上搜索了很长时间,以至于我什至无法解释我拥有什么并且没有尝试过!
请帮忙。
【问题讨论】:
-
managed_file 在提交后被保存到数据库 - 不是吗?所以你不能期望文件对象的值在验证函数中。
-
否,托管文件在单独上传验证中的表单验证之前保存并存储在数据库中。 Image_load() 正在返回一个包含 fid 的有效图像对象。我只是无法让 user_save() 将其存储到我的字段中。
-
这是我关于 SO 的第一个问题,有人认为有必要标记它吗?我认为这很清楚,经过研究并且很有帮助。无论如何 - 生活和学习。
标签: image forms drupal drupal-7 drupal-forms