public static function PriceListItem::bundleFieldDefinitions in Commerce Pricelist 8
Same name and namespace in other branches
- 8.2 src/Entity/PriceListItem.php \Drupal\commerce_pricelist\Entity\PriceListItem::bundleFieldDefinitions()
Provides field definitions for a specific bundle.
This function can return definitions both for bundle fields (fields that are not defined in $base_field_definitions, and therefore might not exist on some bundles) as well as bundle-specific overrides of base fields (fields that are defined in $base_field_definitions, and therefore exist for all bundles). However, bundle-specific base field overrides can also be provided by 'base_field_override' configuration entities, and that is the recommended approach except in cases where an entity type needs to provide a bundle-specific base field override that is decoupled from configuration. Note that for most entity types, the bundles themselves are derived from configuration (e.g., 'node' bundles are managed via 'node_type' configuration entities), so decoupling bundle-specific base field overrides from configuration only makes sense for entity types that also decouple their bundles from configuration. In cases where both this function returns a bundle-specific override of a base field and a 'base_field_override' configuration entity exists, the latter takes precedence.
@todo WARNING: This method will be changed in https://www.drupal.org/node/2346347.
Parameters
\Drupal\Core\Entity\EntityTypeInterface $entity_type: The entity type definition. Useful when a single class is used for multiple, possibly dynamic entity types.
string $bundle: The bundle.
\Drupal\Core\Field\FieldDefinitionInterface[] $base_field_definitions: The list of base field definitions.
Return value
\Drupal\Core\Field\FieldDefinitionInterface[] An array of bundle field definitions, keyed by field name.
Overrides ContentEntityBase::bundleFieldDefinitions
See also
\Drupal\Core\Entity\EntityFieldManagerInterface::getFieldDefinitions()
\Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions()
File
- src/
Entity/ PriceListItem.php, line 371
Class
- PriceListItem
- Defines the price list item entity.
Namespace
Drupal\commerce_pricelist\EntityCode
public static function bundleFieldDefinitions(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) {
/** @var \Drupal\commerce_pricelist\Entity\PriceListItemTypeInterface $price_list_item_type */
$price_list_item_type = PriceListItemType::load($bundle);
$purchasable_entity_type_id = $price_list_item_type
->getPurchasableEntityTypeId();
/** @var \Drupal\Core\StringTranslation\TranslatableMarkup $purchasable_entity_type_label */
$purchasable_entity_type_label = $price_list_item_type
->getPurchasableEntityType()
->getLabel();
$fields = [];
$fields['purchased_entity'] = clone $base_field_definitions['purchased_entity'];
if ($purchasable_entity_type_id) {
$fields['purchased_entity']
->setSetting('target_type', $purchasable_entity_type_id);
$fields['purchased_entity']
->setLabel($purchasable_entity_type_label);
}
else {
// This price list item type won't reference a purchasable entity.
// The field can't be removed here, or converted to a configurable one, so
// it's hidden instead.
// https://www.drupal.org/node/2346347#comment-10254087.
$fields['purchased_entity']
->setRequired(FALSE);
$fields['purchased_entity']
->setDisplayOptions('form', [
'type' => 'hidden',
]);
$fields['purchased_entity']
->setDisplayConfigurable('form', FALSE);
$fields['purchased_entity']
->setDisplayConfigurable('view', FALSE);
$fields['purchased_entity']
->setReadOnly(TRUE);
}
return $fields;
}