私のユースケース:
Webフォームでこれを行うことができましたが、エンティティフォームで同じタスクを実行することができませんでした。次のコードを使用してフォームを取得できます...
<?php
$entityform = entityform_empty_load('my_eform_type');
$form = entityform_form_wrapper($entityform);
?>
問題があったのは、キャッシュされた$ _POSTから正しい構造と値で$ form_state配列を作成し、それをdrupal_form_submit( )。私のエンティティフォームには画像、日付、チェックボックスのフィールドがあるため、複雑さが増しています。
次のコードを使用して、エンティティフォームの送信を手動で作成して保存できました...
<?php
$values = array(
'type' => 'my_eform_type',
'uid' => $user->uid,
'created' => time(),
'changed' => time(),
'language' => LANGUAGE_NONE,
);
// For brevity's sake, I don't show adding all the fields
// from the cached $_POST to the $values array.
$entityform = entityform_create($values);
$entityform->save();
?>
...しかし、それはフォーム検証を提供せず、エラー機能でリロードしません。間違ったサイズの画像がアップロードされるなどのエラーは、フォームの送信中に捕捉されます。
Entityformが送信されると、entityform通知メールも送信され、ユーザーは確認ページにリダイレクトされます。ユーザー認証の前にこれらのことを実行したくありません。
d.o。ハンドブックの一部のコード はありますが、drupal_form_submit()については触れていません。
Entityform 1.1を使用しています。
drupal_form_submit()
は標準フォームではなくエンティティであるため、entityformを送信できないと思います。
エンティティを保存するのが最善の方法ですが、フォームから送信されたフィールドデータに対して操作を実行するために必要な_field_attach_submit
_がありません。
構文は次のとおりです。
_field_attach_submit($entity_type, $entity, $form, &$form_state, $options = array())
_
特定の_$form_state
_に基づく例:
_$form_id = $form_state['build_info']['form_id'];
$entity = $form['#entity'] ?: $form_state['build_info']['args'][0];
$entity_type = $entity->entityType();
$entity_info = entity_get_info($entity_type);
$entity_values = drupal_array_get_nested_value($form_state['values'], $form['#parents']);
list(, , $bundle) = entity_extract_ids($entity_type, $entity);
// Copy top-level form values that are not for fields to entity properties,
// without changing existing entity properties that are not being edited by
// this form. Copying field values must be done using field_attach_submit().
$values_excluding_fields = $info['fieldable'] ? array_diff_key($entity_values, field_info_instances($this->entityType, $bundle)) : $entity_values;
foreach ($values_excluding_fields as $key => $value) {
$entity->$key = $value;
}
if ($entity_info['fieldable']) {
field_attach_submit($entity_type, $entity, $form, $form_state);
}
$entity->created = isset($entity->is_new) ? REQUEST_TIME : $entity->created;
$entity->changed = REQUEST_TIME;
entity_save($entity_type, $entity);
_
または、entityform_save()
を使用してエンティティフォームを送信することもできます。例:
_$form = new Entityform(array('type' = 'my_entitty_form', 'language' => LANGUAGE_NONE));
$form->field_entityform_1 = array(LANGUAGE_NONE => array(array('value' => 'field_1')));
$form->field_entityform_2 = array(LANGUAGE_NONE => array(array('value' => 'field_2' )));
$form->uid = 1; // this is the form id
entityform_save($form);
_