1

ファイルアップロードフォームがあります

ユーザーがファイルを再度アップロードする必要がないように、他の検証エラーがある場合にこのファイルを保持するにはどうすればよいですか?

検証関数でこれを試しましたが、うまくいきません:

function mymodule_someform_validate($form, &$form_state) {
  $form_state["values"]["some_field"] = some_value;
}

$form_state["values"] 変数がフォーム定義関数で使用できない - mymodule_someform($form, &$form_state)

何か案は?

4

2 に答える 2

1

タイプを使用するだけmanaged_fileで、それが実行されます。

$form['my_file_field'] = array(
  '#type' => 'managed_file',
  '#title' => 'File',
  '#upload_location' => 'public://my-folder/'
);

そして、送信ハンドラーで次のようにします。

// Load the file via file.fid.
$file = file_load($form_state['values']['my_file_field']);

// Change status to permanent.
$file->status = FILE_STATUS_PERMANENT;

// Save.
file_save($file);

検証が失敗し、ユーザーがフォームを離れた場合、ファイルは数時間後に自動的に削除されます (file_managedテーブル内のすべてのファイルが削除されていないためFILE_STATUS_PERMANENT)。検証が失敗しない場合、送信ハンドラーが実行され、ファイルはシステムで永続的としてマークされます。

于 2011-10-12T11:34:08.303 に答える