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

评论 (写第一个评论)