本文整理汇总了PHP中Drupal\Core\Field\WidgetBase::setWidgetState方法的典型用法代码示例。如果您正苦于以下问题:PHP WidgetBase::setWidgetState方法的具体用法?PHP WidgetBase::setWidgetState怎么用?PHP WidgetBase::setWidgetState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Drupal\Core\Field\WidgetBase
的用法示例。
在下文中一共展示了WidgetBase::setWidgetState方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: submitCleanFormState
/**
* Cleans up the form state for a submitted entity form.
*
* After field_attach_submit() has run and the form has been closed, the form
* state still contains field data in $form_state->get('field'). Unless that
* data is removed, the next form with the same #parents (reopened add form,
* for example) will contain data (i.e. uploaded files) from the previous form.
*
* @param $entity_form
* The entity form.
* @param $form_state
* The form state of the parent form.
*/
public static function submitCleanFormState(&$entity_form, FormStateInterface $form_state) {
$info = \Drupal::entityTypeManager()->getDefinition($entity_form['#entity_type']);
if (!$info->get('field_ui_base_route')) {
// The entity type is not fieldable, nothing to cleanup.
return;
}
$bundle = $entity_form['#entity']->bundle();
$instances = \Drupal::service('entity_field.manager')->getFieldDefinitions($entity_form['#entity_type'], $bundle);
foreach ($instances as $instance) {
$field_name = $instance->getName();
if (!empty($entity_form[$field_name]['#parents'])) {
$parents = $entity_form[$field_name]['#parents'];
array_pop($parents);
if (!empty($parents)) {
$field_state = array();
WidgetBase::setWidgetState($parents, $field_name, $form_state, $field_state);
}
}
}
}
示例2: extractFormValues
/**
* {@inheritdoc}
*/
public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state)
{
if ($this->isDefaultValueWidget($form_state)) {
$items->filterEmptyItems();
return;
}
$field_name = $this->fieldDefinition->getName();
$path = array_merge($form['#parents'], array($field_name));
$submitted_values = $form_state->getValue($path);
$values = [];
foreach ($items as $delta => $value) {
$this->setIefId(sha1($items->getName() . '-ief-single-' . $delta));
/** @var \Drupal\Core\Entity\EntityInterface $entity */
if (!($entity = $form_state->get(['inline_entity_form', $this->getIefId(), 'entity']))) {
return;
}
$values[$submitted_values[$delta]['_weight']] = ['entity' => $entity];
}
// Sort items base on weights.
ksort($values);
$values = array_values($values);
// Let the widget massage the submitted values.
$values = $this->massageFormValues($values, $form, $form_state);
// Assign the values and remove the empty ones.
$items->setValue($values);
$items->filterEmptyItems();
// Put delta mapping in $form_state, so that flagErrors() can use it.
$field_name = $this->fieldDefinition->getName();
$field_state = WidgetBase::getWidgetState($form['#parents'], $field_name, $form_state);
foreach ($items as $delta => $item) {
$field_state['original_deltas'][$delta] = isset($item->_original_delta) ? $item->_original_delta : $delta;
unset($item->_original_delta, $item->_weight);
}
WidgetBase::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
}
示例3: extractFormValues
/**
* {@inheritdoc}
*/
public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state)
{
if ($this->isDefaultValueWidget($form_state)) {
$items->filterEmptyItems();
return;
}
$trigger = $form_state->getTriggeringElement();
if (empty($trigger['#ief_submit_trigger'])) {
return;
}
$field_name = $this->fieldDefinition->getName();
$parents = array_merge($form['#parents'], [$field_name, 'form']);
$ief_id = sha1(implode('-', $parents));
$this->setIefId($ief_id);
$inline_entity_form_state = $form_state->get('inline_entity_form');
if (isset($inline_entity_form_state[$this->getIefId()])) {
$values = $inline_entity_form_state[$this->getIefId()];
$key_exists = TRUE;
} else {
$values = [];
$key_exists = FALSE;
}
if ($key_exists) {
// If the inline entity form is still open, then its entity hasn't
// been transfered to the IEF form state yet.
if (empty($values['entities']) && !empty($values['form'])) {
// @todo Do the same for reference forms.
if ($values['form'] == 'add') {
$element = NestedArray::getValue($form, [$field_name, 'widget', 'form']);
$entity = $element['inline_entity_form']['#entity'];
$values['entities'][] = ['entity' => $entity];
}
}
$values = $values['entities'];
// Account for drag-and-drop reordering if needed.
if (!$this->handlesMultipleValues()) {
// Remove the 'value' of the 'add more' button.
unset($values['add_more']);
// The original delta, before drag-and-drop reordering, is needed to
// route errors to the corect form element.
foreach ($values as $delta => &$value) {
$value['_original_delta'] = $delta;
}
usort($values, function ($a, $b) {
return SortArray::sortByKeyInt($a, $b, '_weight');
});
}
// Let the widget massage the submitted values.
$values = $this->massageFormValues($values, $form, $form_state);
// Assign the values and remove the empty ones.
$items->setValue($values);
$items->filterEmptyItems();
// Put delta mapping in $form_state, so that flagErrors() can use it.
$field_state = WidgetBase::getWidgetState($form['#parents'], $field_name, $form_state);
foreach ($items as $delta => $item) {
$field_state['original_deltas'][$delta] = isset($item->_original_delta) ? $item->_original_delta : $delta;
unset($item->_original_delta, $item->_weight);
}
WidgetBase::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
}
}
示例4: extractFormValues
/**
* {@inheritdoc}
*/
public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state)
{
if ($this->isDefaultValueWidget($form_state)) {
$items->filterEmptyItems();
return;
}
if (!$this->isSubmitRelevant($form, $form_state)) {
return;
}
$field_name = $this->fieldDefinition->getName();
// Extract the values from $form_state->getValues().
$parents = array_merge($form['#parents'], [$field_name, 'form']);
$ief_id = sha1(implode('-', $parents));
$this->setIefId($ief_id);
$inline_entity_form_state = $form_state->get('inline_entity_form');
if (isset($inline_entity_form_state[$this->getIefId()])) {
$values = $inline_entity_form_state[$this->getIefId()];
$key_exists = TRUE;
} else {
$values = [];
$key_exists = FALSE;
}
if ($key_exists) {
$values = $values['entities'];
// Account for drag-and-drop reordering if needed.
if (!$this->handlesMultipleValues()) {
// Remove the 'value' of the 'add more' button.
unset($values['add_more']);
// The original delta, before drag-and-drop reordering, is needed to
// route errors to the corect form element.
foreach ($values as $delta => &$value) {
$value['_original_delta'] = $delta;
}
usort($values, function ($a, $b) {
return SortArray::sortByKeyInt($a, $b, '_weight');
});
}
foreach ($values as $delta => &$item) {
/** @var \Drupal\Core\Entity\EntityInterface $entity */
$entity = $item['entity'];
if (!empty($item['needs_save'])) {
$entity->save();
}
if (!empty($item['delete'])) {
$entity->delete();
unset($items[$delta]);
}
}
// Let the widget massage the submitted values.
$values = $this->massageFormValues($values, $form, $form_state);
// Assign the values and remove the empty ones.
$items->setValue($values);
$items->filterEmptyItems();
// Put delta mapping in $form_state, so that flagErrors() can use it.
$field_state = WidgetBase::getWidgetState($form['#parents'], $field_name, $form_state);
foreach ($items as $delta => $item) {
$field_state['original_deltas'][$delta] = isset($item->_original_delta) ? $item->_original_delta : $delta;
unset($item->_original_delta, $item->_weight);
}
WidgetBase::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
}
}
示例5: extractFormValues
/**
* {@inheritdoc}
*/
public function extractFormValues(FieldItemListInterface $items, array $form, FormStateInterface $form_state)
{
if ($this->isDefaultValueWidget($form_state)) {
$items->filterEmptyItems();
return;
}
$field_name = $this->fieldDefinition->getName();
$parents = array_merge($form['#parents'], [$field_name]);
$submitted_values = $form_state->getValue($parents);
$values = [];
foreach ($items as $delta => $value) {
$element = NestedArray::getValue($form, [$field_name, 'widget', $delta]);
/** @var \Drupal\Core\Entity\EntityInterface $entity */
$entity = $element['inline_entity_form']['#entity'];
$weight = isset($submitted_values[$delta]['_weight']) ? $submitted_values[$delta]['_weight'] : 0;
$values[$weight] = ['entity' => $entity];
}
// Sort items base on weights.
ksort($values);
$values = array_values($values);
// Let the widget massage the submitted values.
$values = $this->massageFormValues($values, $form, $form_state);
// Assign the values and remove the empty ones.
$items->setValue($values);
$items->filterEmptyItems();
// Populate the IEF form state with $items so that WidgetSubmit can
// perform the necessary saves.
$ief_id = sha1(implode('-', $parents));
$widget_state = ['instance' => $this->fieldDefinition, 'delete' => [], 'entities' => []];
foreach ($items as $delta => $value) {
$widget_state['entities'][$delta] = ['entity' => $value->entity, 'needs_save' => TRUE];
}
$form_state->set(['inline_entity_form', $ief_id], $widget_state);
// Put delta mapping in $form_state, so that flagErrors() can use it.
$field_name = $this->fieldDefinition->getName();
$field_state = WidgetBase::getWidgetState($form['#parents'], $field_name, $form_state);
foreach ($items as $delta => $item) {
$field_state['original_deltas'][$delta] = isset($item->_original_delta) ? $item->_original_delta : $delta;
unset($item->_original_delta, $item->_weight);
}
WidgetBase::setWidgetState($form['#parents'], $field_name, $form_state, $field_state);
}