将URL参数传递给在菜单项中创建的Drupal表单

时间:2013-07-29 16:03:14

标签: forms drupal drupal-7

我正在使用Drupal 7并且有一个自定义模块,我在其中创建一个显示Drupal表单的菜单项。代码设置如下:

$items['job-seekers/update-resume/%'] = array(
  'title' => 'Update Resume',
  'page callback' => 'drupal_get_form',
  'page arguments' => 'oa_onboard_update_resume_form',    
  'access arguments' => array('access content'),
  'page arguments' => array(2),
);

所以我的菜单项将显示一个表单,但我需要获取URL中传递的参数并将其存储在隐藏的表单字段中,最终会传递给表单提交方法进行处理。我的表单代码如下所示:

/**
 * Form callback for updating resume
 */
function oa_onboard_update_resume_form($form_state) {  

  $form['resume_file'] = array(
    '#type' => 'file',
    '#title' => t('Resume Upload'),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );

  return $form;
}

所以这是一个非常简单的表单,它只是一个文件上传字段,但是我无法弄清楚如何访问URL中传递的ID。最初我以为我需要在表单方法中考虑它,如下所示:

function oa_onboard_update_resume_form($candidateId) { 

但是当我尝试这样做时出现错误:

Notice: Undefined index: 20249278 in drupal_retrieve_form() (line 763 of C:\xampp\htdocs\mysite\includes\form.inc).
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function '20249278' not found or invalid function name in drupal_retrieve_form() (line 798 of C:\xampp\htdocs\mysite\includes\form.inc).

我想我可能会以错误的方式解决这个问题。最重要的是我只需要创建一个URL,我可以传递一个ID来显示一个表格,并将该ID与文件上传一起传递给提交方法。

提前致谢。

修改 这是一个新的回调函数,它根据下面的建议修复菜单项后呈现表单:

function oa_onboard_update_resume_form($candidateId) {  

  $form['candidateId'] = array(
    '#type' => 'hidden',
    '#value' => $candidateId,
  );

  $form['resume_file'] = array(
    '#type' => 'file',
    '#title' => t('Resume Upload'),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );

  return $form;
}

2 个答案:

答案 0 :(得分:1)

在hook_menu函数中,你有两次设置'page arguments',你应该使用函数oa_onboard_update_resume_form'page call''

$items['job-seekers/update-resume/%'] = array(
  'title' => 'Update Resume',
  'page callback' => 'oa_onboard_update_resume_form',    
  'access arguments' => array('access content'),
  'page arguments' => array(2),
);

答案 1 :(得分:1)

好的,这就是最终的工作:

$items['job-seekers/update-resume/%'] = array(
  'title' => 'Update Resume',
  'page callback' => 'drupal_get_form',
  'page arguments' => array('oa_onboard_update_resume_form', 2),
  'access arguments' => array('access content'),
);

function oa_onboard_update_resume_form($form, &$form_state, $candidateId) {
  // I can use candidateId here now
}