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小节:

评论 (写第一个评论)