1

ファイルアップロード要素を含むフォームがあります。このファイル (画像) はユーザー ピクチャである必要がありますが、設定されていません。

形:

      $form['f']['step4']['file_e'] = array(
    '#title' => t('Image'),
    '#type' => 'managed_file',
    '#description' => t('The uploaded image will be displayed on this page using the image style choosen below.'),
    '#upload_location' => 'public://images/',
  );

検証

function fill_up_profile_form_validate($form, &$form_state) {
  global $user;

  if (isset($form['f']['actions']['submit']['#value']) && $form_state['triggering_element']['#value'] == $form['f']['actions']['submit']['#value']) {
    $file = file_load($form_state['values']['f']['step4']['file_e']);
    $validators = array(
      'file_validate_is_image' => array(), 
      'file_validate_size' => array(1 * 1024 * 1024),
    );

    $errors = file_validate($file, $validators);
    if (!empty($errors)) {
      $message = '';
      foreach ($errors as $error)
        $message .= $error . '<br/>';

      form_set_error('Error!', $message);
    } else {
      $file->status = FILE_STATUS_PERMANENT;
      file_save($file);
      $edit['picture'] = $file;
      user_save($user, $edit);
    }
  }
}

ご協力ありがとうございました。

4

1 に答える 1

1

$form の代わりに $form_state を試してください。$form_state には送信された値が含まれています! また、Drupal 7.x では、単純に $form_state['values']['f']['step4']['file_e'] を使用して値を取得することはできません。echo "<pre>"; print_R($form_state); echo "</pre>";配列の正しい構造を学ぶには、 a を実行するだけです!

このコードもご覧ください: http://ly2.in/hBMxPK

于 2013-04-13T04:35:27.093 に答える