11.4 实体API

1龶龲龯龬龪

// 检测对象是否是一个实体的实例
if ($object instanceof \Drupal\Core\Entity\EntityInterface) {

}

// 内容实体实例检测
if ($entity instanceof \Drupal\Core\Entity\ContentEntityInterface){

}

// 获取实体类型
$entity->getEntityTypeId();

// 节点实例检测
if($entity instanceof \Drupal\node\NodeInterface){

}

// 使用entityType获取动态实体类型
$needed_type = ‘node’;
if ($entity->getEntityTypeId() == $needed_type){

}

2龶齊齇龲龯鼓龲龯鼒鼎龕鼍鼋

鼬鼨龙鼇鼒鼎鼆鼃齊齇龲龯龕鼍鼋鼀黼龲龯龕ID鼀龲龯bundle鼀黹黸ID黵黵黲黱黮EntityInterface黭黪齊齇黩黥龕黤鼲黲

// 获取实体id
$entity->id();

// 获取实体bundle
$entity->bundle();

// 检测实体是否为新实体
$entity->isNew();

// 获取实体的标签
$entiry->label();

// 获取实体URI
$entity->uri();

// 创建实体的副本
$duplicate = $entity->createDuplicate();

3龶黋黊龲龯

$node = entity_create('node', [
 'title' => 'My node',
 'body' => 'The body content. This just works like this due to the new Entity Field API. It will be assigned as the value of the first field item in the default language.'
]);

// 你也可以使用静态的创建方法
$node = Node::create(['title' => 'The node title']);

// 使用实体管理器(entity manager)
$node = \Drupal::entityTypeManager()->getStorage(‘node’)->create(['type' => 'article', 'title' => 'Another node'));

4龶麏麋龲龯

// 使用静态方法
$node = Node::load(1);

// 动态实体类型,entity_load()加载新单个实体。
$entity = entity_load($entity_type,$id);

// 使用存储控制器
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load(1);

// 加载多个实体使用entity_load_multiple()
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->loadMultiple(array(1,2,3));

黠鹼黩黝龲龯鼀鼆鼃鹸麏麋鹶鼀鹳鹲黹鹱鼀鹮鹲鹬麆黲

5龶鹬麆龲龯

// 保存一个实体
$entity->save();

鹧龙鼒鼎鹦鼆鼨鹣黝龲龯鼀麟鼆鼨鹣鹠麆鹟龕龲龯鼀鼆鼃鹛龲龯鼍鼋鹘鹗鹓龲龯龡龝龡龙龗黝龲龯黲龙鹒鹎鼀龦鹣齍齋龲龯鼀鹍鹋鹈龙龗龲龯ID黲黠鹼鹬麆龙龗黝龲龯(龒黼鹅鹁鸿鸼)鼀鼆鼃鸸麀鼬鼨isNew黗鸷鼀黱黮鼃鸶鸴鸳黲

// 下面的代码试图插入一个节点ID为5的节点,如果这个节点ID已存在则会失败
$node->nid->value = 5;

$node->enforceIsNew(TRUE);

$node->save();

6龶鸡鸞龲龯

// 删除单个实体
$entity = \Drupal::entityTypeManager()->getStorage(‘node’)->load(1);
$entity->delete();

// 一次删除多个实体
\Drupal::entityTypeManager()->getStorage($entity_type)->delete(array($id1 => $entity1,$id2 => $entity2));

7龶鸔鸐麃麀

access()鼒鼎鼆鼃鼨鹣龬龪鸌鸋鸉鸔鸐龲龯黲鹧龗鼒鼎鸈鸆鸃黥鸂鸁鼀黗鷾龕鸂鸁鸋view龶update龶delete鷽create鼀create鸋鼰鷹鷶鼀黱黮鸶鸯黲

鸔鸐龬龪鹍鷴鷱鷭鷬鸔鸐麃麀麖黲

// 检测实体的查看权限,默认会对当前登录用户进行这一检测
if ($entity->access(‘view’)){

}

// 检测一个用户是否可以删除一个实体
if ($entity->access(‘delete’,$account)){

}

鹧龗鸉鷧鷐龡黠鹼龬龪鷎鷋龡龝鸋鸉黋黊鷇龲龯鼀鷃鷀鶿鶾鼀鶽鶹鶸鶶黭鼬鼨鸔鸐麃麀麖鷖鷒龬鷫黲

\Drupal::entity::entityTypeManager()->getAccessController('node')->createAccess('article');

黼鸨鹠鶵鸋龙龗龲龯鼀$entity->access('create')麟鼆鼃鶴鷒鼀鹶鹍鶱鼨createAccess()鼒鼎鼀鶰鶭鹎鶬鹶鸂鸁鹍鷴鷱鶫鸔鸐麃麀麖龕access()鼒鼎鶩黲

鶥鶡: 鸋鼇鶠鶟鶩鼬鼨\Drupal::entityManager()鼀鶜鹠鶙鹋鶗鼀鶕鹍鹟9.x鹘鸡鸞黲鶽鶹黱鼨\Drupa::entityTypeManager()鸴鶎\Drupal::entityManager()黲

本书共79小节:

评论 (写第一个评论)