在Drupal 8中以编程方式创建自定义实体类型
我一直在努力在Drupal 8.2.x中以编程方式创建自定义实体类型。实体类型应该是可翻译和可修改的 创建默认配置()并不能解决问题,因为它不允许使用其处理程序定义类 在尝试一本书中的示例时(Matt Glaman的Drupal 8 Development Cookbook,2016,第章创建内容实体类型),启用模块后出现错误: 致命错误:Drupal\mymodule\Entity\Message::baseFieldDefinitions(Drupal\mymodule\Entity\EntityTypeInterface$Entity\U类型)的声明必须与Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions(Drupal\Core\Entity\EntityTypeInterface$Entity\U类型)兼容在第45行的/srv/www/vhosts/test/modules/custom/mymodule/src/Entity/Message.php中 书中的代码似乎已经过时了。所以我想知道是什么让代码不兼容。如果有人能帮我,请 类的定义和声明如下在Drupal 8中以编程方式创建自定义实体类型,drupal,types,entity,drupal-8,Drupal,Types,Entity,Drupal 8,我一直在努力在Drupal 8.2.x中以编程方式创建自定义实体类型。实体类型应该是可翻译和可修改的 创建默认配置()并不能解决问题,因为它不允许使用其处理程序定义类 在尝试一本书中的示例时(Matt Glaman的Drupal 8 Development Cookbook,2016,第章创建内容实体类型),启用模块后出现错误: 致命错误:Drupal\mymodule\Entity\Message::baseFieldDefinitions(Drupal\mymodule\Entity\Ent
/**
* @file Contains \Drupal\mymodule\Entity\Message
*/
namespace Drupal\mymodule\Entity;
use Drupal\Core\Entity\ContentEntityBase;
/**
* Defines the profile entity class.
*
* @ContentEntityType(
* id = "message",
* label = @Translation("Message"),
* handlers = {
* "list_builder" = "Drupal\mymodule\MessageListBuilder",
* "form" = {
* "default" = "Drupal\Core\Entity\ContentEntityForm",
* "add" = "Drupal\Core\Entity\ContentEntityForm",
* "edit" = "Drupal\Core\Entity\ContentEntityForm",
* "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm",
* },
* "route_provider" = {
* "html" = "Drupal\Core\Entity\Routing\DefaultHtmlRouteProvider",
* },
* },
* base_table = "message",
* fieldable = TRUE,
* entity_keys = {
* "id" = "message_id",
* "label" = "title",
* "langcode" = "langcode",
* "uuid" = "uuid"
* },
* links = {
* "canonical" = "/messages/{message}",
* "edit-form" = "/messages/{message}/edit",
* "delete-form" = "/messages/{message}/delete",
* "collection" = "/admin/content/messages"
* },
* )
*/
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface entity_type) {
$fields['message_id'] = BaseFieldDefinition::create('integer')
->setLabel(t('Message ID'))
->setDescription(t('The message ID.'))
->setReadOnly(TRUE)
->setSetting('unsigned', TRUE);
$fields['langcode'] = BaseFieldDefinition::create('language')
->setLabel(t('Language code'))
->setDescription(t('The message language code.'))
->setRevisionable(TRUE);
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The message UUID.'))
->setReadOnly(TRUE);
$fields['title'] = BaseFieldDefinition::create('string')
->setLabel(t('Title'))
->setRequired(TRUE)
->setTranslatable(TRUE)
->setRevisionable(TRUE)
->setSetting('max_length', 255)
->setDisplayOptions('view', array(
'label' => 'hidden',
'type' => 'string',
'weight' => -5,
))
->setDisplayOptions('form', array(
'type' => 'string_textfield',
'weight' => -5,
))
->setDisplayConfigurable('form', TRUE);
$fields['content'] = BaseFieldDefinition::create('text_long')
->setLabel(t('Content'))
->setDescription(t('Content of the message'))
->setTranslatable(TRUE)
->setDisplayOptions('view', array(
'label' => 'hidden',
'type' => 'text_default',
'weight' => 0,
))
->setDisplayConfigurable('view', TRUE)
->setDisplayOptions('form', array(
'type' => 'text_textfield',
'weight' => 0,
))
->setDisplayConfigurable('form', TRUE);
return $fields;
}
我是这里的作者,很抱歉。我认为勘误表已经更新了。但这里有一个解决办法 原因似乎是未导入
EntityTypeInterface
。尝试添加使用Drupal\Core\Entity\EntityTypeInterface代码>到代码的开头
<?php
/**
* @file Contains \Drupal\mymodule\Entity\Message
*/
namespace Drupal\mymodule\Entity;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
您忘记了类定义,如:
class MyEntity extends ContentEntityBase {}