How to create a new custom Content Entity on drupal 8 ?
Drupal 8 has two type of entities, ContentEntity and ConfigEntity. Content entity is based on database table and config entity is based on Drupal config table.
Here an example of Content Entity : Vehicle.
(Thanks to example module)
1. Create a New module (Example)
2. Entity : Create a class Vehicle in /vehicle/src/Entity
Like :
<?php
namespace Drupal\vehicle\Entity;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
/**
* Defines the Vehicle entity.
*
*
* @ContentEntityType(
* id = "vehicle",
* label = @Translation("Vehicle entity"),
* base_table = "vehicle",
* admin_permission = "administer modules",
* entity_keys = {
* "id" = "id",
* "label" = "title",
* "uuid" = "uuid"
* },
* )
*
*/
class Vehicle extends ContentEntityBase{
/**
* {@inheritdoc}
*
* Define the field properties here.
*
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
// Standard field, used as unique if primary index.
$fields['id'] = BaseFieldDefinition::create('integer')
->setLabel(t('ID'))
->setDescription(t('The ID of the Vehicle entity.'))
->setReadOnly(TRUE);
// Standard field, unique outside of the scope of the current project.
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The UUID of the Vehicle entity.'))
->setReadOnly(TRUE);
//A title
$fields['title'] = BaseFieldDefinition::create('string')
->setLabel(t('Title'))
->setDescription(t('The title.'))
->setSettings(array(
'default_value' => '',
'max_length' => 255,
'text_processing' => 0,
))
->setDisplayOptions('view', array(
'label' => 'hidden',
'type' => 'string',
'weight' => -6,
))
->setDisplayOptions('form', array(
'type' => 'string_textfield',
'weight' => -6,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
//A description
$fields['description'] = BaseFieldDefinition::create('string_long')
->setLabel(t('Description'))
->setDescription(t('The description.'))
->setDisplayOptions('form', array(
'type' => 'string_textarea',
'weight' => 0,
'settings' => array(
'rows' => 4,
),
))
->setDisplayOptions('view', array(
'label' => 'above',
'type' => 'string',
'weight' => -6,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
return $fields;
}
}
3. Install the module
This will create the entity on drupal 8, database table .... You can use the the entity with a custom module but we haven't define any user interfaces. Check this tutorial to get a complete entity example.
Comments