Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Field/FieldDefinitionInterface.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,262 @@ +<?php + +namespace Drupal\Core\Field; + +use Drupal\Core\Cache\CacheableDependencyInterface; +use Drupal\Core\Entity\FieldableEntityInterface; +use Drupal\Core\TypedData\ListDataDefinitionInterface; + +/** + * Defines an interface for entity field definitions. + * + * An entity field is a data object that holds the values of a particular field + * for a particular entity (see \Drupal\Core\Field\FieldItemListInterface). For + * example, $node_1->body and $node_2->body contain different data and therefore + * are different field objects. + * + * In contrast, an entity field *definition* is an object that returns + * information *about* a field (e.g., its type and settings) rather than its + * values. As such, if all the information about $node_1->body and $node_2->body + * is the same, then the same field definition object can be used to describe + * both. + * + * It is up to the class implementing this interface to manage where the + * information comes from. For example, field.module provides an implementation + * based on two levels of configuration. It allows the site administrator to add + * custom fields to any entity type and bundle via the "field_storage_config" + * and "field_config" configuration entities. The former for storing + * configuration that is independent of which entity type and bundle the field + * is added to, and the latter for storing configuration that is specific to the + * entity type and bundle. The class that implements "field_config" + * configuration entities also implements this interface, returning information + * from either itself, or from the corresponding "field_storage_config" + * configuration, as appropriate. + * + * However, entity base fields, such as $node->title, are not managed by + * field.module and its "field_storage_config"/"field_config" + * configuration entities. Therefore, their definitions are provided by + * different objects based on the class \Drupal\Core\Field\BaseFieldDefinition, + * which implements this interface as well. + * + * Field definitions may fully define a concrete data object (e.g., + * $node_1->body), or may provide a best-guess definition for a data object that + * might come into existence later. For example, $node_1->body and $node_2->body + * may have different definitions (e.g., if the node types are different). When + * adding the "body" field to a View that can return nodes of different types, + * the View can get a field definition that represents the "body" field + * abstractly, and present Views configuration options to the administrator + * based on that abstract definition, even though that abstract definition can + * differ from the concrete definition of any particular node's body field. + */ +interface FieldDefinitionInterface extends ListDataDefinitionInterface, CacheableDependencyInterface { + + /** + * Returns the machine name of the field. + * + * This defines how the field data is accessed from the entity. For example, + * if the field name is "foo", then $entity->foo returns its data. + * + * @return string + * The field name. + */ + public function getName(); + + /** + * Returns the field type. + * + * @return string + * The field type, i.e. the id of a field type plugin. For example 'text'. + * + * @see \Drupal\Core\Field\FieldTypePluginManagerInterface + */ + public function getType(); + + /** + * Returns the ID of the entity type the field is attached to. + * + * This method should not be confused with EntityInterface::getEntityTypeId() + * (configurable fields are config entities, and thus implement both + * interfaces): + * - FieldDefinitionInterface::getTargetEntityTypeId() answers "as a field, + * which entity type are you attached to?". + * - EntityInterface::getEntityTypeId() answers "as a (config) entity, what + * is your own entity type?". + * + * @return string + * The entity type ID. + */ + public function getTargetEntityTypeId(); + + /** + * Gets the bundle the field is attached to. + * + * This method should not be confused with EntityInterface::bundle() + * (configurable fields are config entities, and thus implement both + * interfaces): + * - FieldDefinitionInterface::getTargetBundle() answers "as a field, + * which bundle are you attached to?". + * - EntityInterface::bundle() answers "as a (config) entity, what + * is your own bundle?" (not relevant in our case, the config entity types + * used to store the definitions of configurable fields do not have + * bundles). + * + * @return string|null + * The bundle the field is defined for, or NULL if it is a base field; i.e., + * it is not bundle-specific. + */ + public function getTargetBundle(); + + /** + * Returns whether the display for the field can be configured. + * + * @param string $display_context + * The display context. Either 'view' or 'form'. + * + * @return bool + * TRUE if the display for this field is configurable in the given context. + * If TRUE, the display options returned by getDisplayOptions() may be + * overridden via the respective entity display. + * + * @see \Drupal\Core\Entity\Display\EntityDisplayInterface + */ + public function isDisplayConfigurable($display_context); + + /** + * Returns the default display options for the field. + * + * If the field's display is configurable, the returned display options act + * as default values and may be overridden via the respective entity display. + * Otherwise, the display options will be applied to entity displays as is. + * + * @param string $display_context + * The display context. Either 'view' or 'form'. + * + * @return array|null + * The array of display options for the field, or NULL if the field is not + * displayed. The following key/value pairs may be present: + * - label: (string) Position of the field label. The default 'field' theme + * implementation supports the values 'inline', 'above' and 'hidden'. + * Defaults to 'above'. Only applies to 'view' context. + * - region: (string) The region the field is in, or 'hidden'. If not + * specified, the default region will be used. + * - type: (string) The plugin (widget or formatter depending on + * $display_context) to use. If not specified or if the requested plugin + * is unknown, the 'default_widget' / 'default_formatter' for the field + * type will be used. Previously 'hidden' was a valid value, it is now + * deprecated in favor of specifying 'region' => 'hidden'. + * - settings: (array) Settings for the plugin specified above. The default + * settings for the plugin will be used for settings left unspecified. + * - third_party_settings: (array) Settings provided by other extensions + * through hook_field_formatter_third_party_settings_form(). + * - weight: (float) The weight of the element. Not needed if 'type' is + * 'hidden'. + * The defaults of the various display options above get applied by the used + * entity display. + * + * @see \Drupal\Core\Entity\Display\EntityDisplayInterface + */ + public function getDisplayOptions($display_context); + + /** + * Returns whether the field can be empty. + * + * If a field is required, an entity needs to have at least a valid, + * non-empty item in that field's FieldItemList in order to pass validation. + * + * An item is considered empty if its isEmpty() method returns TRUE. + * Typically, that is if at least one of its required properties is empty. + * + * @return bool + * TRUE if the field is required. + * + * @see \Drupal\Core\TypedData\Plugin\DataType\ItemList::isEmpty() + * @see \Drupal\Core\Field\FieldItemInterface::isEmpty() + * @see \Drupal\Core\TypedData\DataDefinitionInterface:isRequired() + * @see \Drupal\Core\TypedData\TypedDataManager::getDefaultConstraints() + */ + public function isRequired(); + + /** + * Returns the default value literal for the field. + * + * This method retrieves the raw property assigned to the field definition. + * When computing the runtime default value for a field in a given entity, + * ::getDefaultValue() should be used instead. + * + * @return array + * The default value for the field, as a numerically indexed array of items, + * each item being a property/value array (array() for no default value). + * + * @see FieldDefinitionInterface::getDefaultValue() + * @see FieldDefinitionInterface::getDefaultValueCallback() + */ + public function getDefaultValueLiteral(); + + /** + * Returns the default value callback for the field. + * + * This method retrieves the raw property assigned to the field definition. + * When computing the runtime default value for a field in a given entity, + * ::getDefaultValue() should be used instead. + * + * @return string|null + * The default value callback for the field. + * + * @see FieldDefinitionInterface::getDefaultValue() + * @see FieldDefinitionInterface::getDefaultValueLiteral() + */ + public function getDefaultValueCallback(); + + /** + * Returns the default value for the field in a newly created entity. + * + * This method computes the runtime default value for a field in a given + * entity. To access the raw properties assigned to the field definition, + * ::getDefaultValueLiteral() or ::getDefaultValueCallback() should be used + * instead. + * + * @param \Drupal\Core\Entity\FieldableEntityInterface $entity + * The entity for which the default value is generated. + * + * @return array + * The default value for the field, as a numerically indexed array of items, + * each item being a property/value array (array() for no default value). + * + * @see FieldDefinitionInterface::getDefaultValueLiteral() + * @see FieldDefinitionInterface::getDefaultValueCallback() + */ + public function getDefaultValue(FieldableEntityInterface $entity); + + /** + * Returns whether the field is translatable. + * + * @return bool + * TRUE if the field is translatable. + */ + public function isTranslatable(); + + /** + * Returns the field storage definition. + * + * @return \Drupal\Core\Field\FieldStorageDefinitionInterface + * The field storage definition. + */ + public function getFieldStorageDefinition(); + + /** + * Gets an object that can be saved in configuration. + * + * Base fields are defined in code. In order to configure field definition + * properties per bundle use this method to create an override that can be + * saved in configuration. + * + * @see \Drupal\Core\Field\Entity\BaseFieldBundleOverride + * + * @param string $bundle + * The bundle to get the configurable field for. + * + * @return \Drupal\Core\Field\FieldConfigInterface + */ + public function getConfig($bundle); + +}