logo

Լրացուցիչ Բլոկների Տեսակներ (EBT) - Դասավորության Կառուցողի նոր փորձառություն❗

Լրացուցիչ Բլոկների Տեսակներ (EBT) - ձևավորված, կարգավորելի բլոկների տեսակներ՝ սլայդշոուներ, ներդիրներ, քարտեր, բացվող ցանկեր և շատ ուրիշներ։ Ներառված կարգավորումներ՝ ֆոնի, DOM տուփի, JavaScript փլագինների համար։ Փորձեք դասավորությունների կառուցման ապագան արդեն այսօր։

EBT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EBT մոդուլները

❗Լրացուցիչ Պարբերությունների Տեսակներ (EPT) - Պարբերությունների նոր փորձառություն

Լրացուցիչ պարբերության տեսակներ (EPT) - անալոգիական պարբերության վրա հիմնված մոդուլների հավաքակազմ։

EPT մոդուլների ցուցադրական տարբերակներ Ներբեռնել EPT մոդուլները

Scroll
18/06/2025, by Ivan

Փոխանցում է ընդհանուր օբյեկտի API մեթոդները

  • Entity::create()
  • Entity::load()
  • Entity::save()
  • Entity::id()
  • Entity::bundle()
  • Entity::isNew()
  • Entity::label()

Ավելին կոնկրետ API-ներ կքննարկվեն համապատասխան գլուխներում։

Համոզվեք

// Համոզվեք, որ օբյեկտը entity է։
if ($entity instanceof \Drupal\Core\Entity\EntityInterface) {
}

// Համոզվեք, որ դա content entity է։
if ($entity instanceof \Drupal\Core\Entity\ContentEntityInterface) {
}
// կամ`
if ($entity->getEntityType()->getGroup() == 'content') {
}

// Ստացեք entity տիպը կամ entity տիպի ID-ն։
$entity->getEntityType();
$entity->getEntityTypeId();

// Համոզվեք, որ դա node է։
if ($entity instanceof \Drupal\node\NodeInterface) {
}

Ստացեք entity-ից տեղեկություններ / Entity մեթոդներ

Հասանելի են մի շարք ընդհանուր մեթոդներ՝ օբյեկտից տեղեկություններ ստանալու համար, ինչպիսիք են ID-ն, bundle-ը, revision ID-ն և այլն։ Դիտեք EntityInterface դոկումենտացիան մանրամասների համար։

// Ստացեք ID-ն։
$entity->id();

// Ստացեք bundle-ը։
$entity->bundle();

// Համոզվեք՝ entity-ն նոր է թե ոչ։
$entity->isNew();

// Ստացեք entity-ի լեյբլը։ Entity_label()-ի փոխարինող։
$entity->label();

// Ստացեք entity-ի URL օբյեկտը։
$entity->toUrl();

// Ստացեք entity-ի ներքին path-ը կամ path alias-ը (եթե գոյություն ունի)։
$entity->toUrl()->toString();

// Ստեղծեք կրկնօրինակ, որը կարող է պահպանվել որպես նոր entity։
$duplicate = $entity->createDuplicate();

Ստեղծել entity

// Կարող եք օգտագործել ստատիկ create() մեթոդը, եթե գիտեք entity դասը։
$node = Node::create([
  'type' => 'article',
  'title' => 'The node title',
]);

// Օգտագործեք entity type manager (խորհուրդ է տրվում)։
$node = \Drupal::entityTypeManager()->getStorage('node')->create(['type' => 'article', 'title' => 'Another node']);

// Կամ օգտագործեք պրոցեդուրալ wrapper (հին է, խորհուրդ չի տրվում)։
$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.',
]);

Բազային արժեքները, որոնք գրված են field type-ի անոտացիայում, ավելացվում են միայն բացակա վերին մակարդակի կիլներից։ Գործողությունը խորը միաձուլում չի անում։

Հնարավորության դեպքում խուսափեք օգտագործելու ստատիկ Entity::create() մեթոդը օբյեկտ-կենտրոնացված կոդում։ Փոխարենը օգտագործեք կախվածությունների ներարկում՝ entity type manager-ին ներարկելու համար, ապա ստեղծեք entity $this->entityTypeManager->getStorage($entity_type)->create() մեթոդով։ Սա ապահովում է կոդի ճիշտ բաժանում և հեշտ թեստավորում մոդուլի կողմից։

IDE-ում ավտոմատ հայտնաբերության համար կարող եք նաև վերագրել entity storage ինտերֆեյսը փոփոխականի, օրինակ՝ $this->nodeStorage = $this->entityTypeManager->getStorage('node'); entity ստեղծելու համար օգտագործեք $this->nodeStorage->create()։

Բեռնարկում

// Ստատիկ մեթոդը օգտագործեք
$node = Node::load(1);

// Հին է։ Գործածվում էր entity_load(), որն այժմ entity_load_multiple() է դառնում։
$entity = entity_load($entity_type, $id);

// Օգտագործեք storage controller (խորհուրդ է տրվում)։
$entity = \Drupal::entityTypeManager()->getStorage($entity_type)->load(1);

// Բեռնարկեք մի քանի entity։
$entities = \Drupal::entityTypeManager()->getStorage($entity_type)->loadMultiple([1, 2, 3]);

// Բեռնարկեք entity-ներ ըստ իրենց հատկությունների արժեքների։
$entities = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties(['type' => 'article']);

Օբյեկտը թարմացնելու համար բեռնարկեք այն, կատարեք փոփոխությունները և պահեք։

Խուսափեք օգտագործելու ստատիկ Entity::load() մեթոդը օբյեկտ-կենտրոնացված կոդում։ Փոխարենը օգտագործեք կախվածությունների ներարկում՝ entity type manager-ին ներարկելու համար, ապա բեռնարկեք entity $this->entityTypeManager->getStorage($entity_type)->load($entity_id) մեթոդով։ Սա ապահովում է կոդի ճիշտ բաժանում և հեշտ թեստավորում մոդուլի կողմից։

Entity պահպանում

// Entity պահելու համար
$entity->save();

Դա աշխատում է և՛ նոր, և՛ գոյություն ունեցող entity-ների համար։ Entity-ն ինքն է հետևում, թե նա նոր է, թե ոչ։ Content entity-ների դեպքում դա որոշվում է՝ ունի ID, թե ոչ։ Եթե ցանկանում եք պահպանել օբյեկտը որպես նոր (օրինակ՝ արտահանումում), կարող եք օգտագործել isNew դրոշակը։

// Վերոհիշյալ կոդը փորձելու է ավելացնել նոր node ID 5-ով, որը կթույլատրվի միայն, եթե այդ node-ը գոյություն չունի։
$node->nid->value = 5;
$node->enforceIsNew(TRUE);
$node->save();

Entity ջնջում

// Ջնջել մեկ entity։
$entity = \Drupal::entityTypeManager()->getStorage('node')->load(1);
$entity->delete();

// Ջնջել մի քանի entity միանգամից։
\Drupal::entityTypeManager()->getStorage($entity_type)->delete([$id1 => $entity1, $id2 => $entity2]);

Մուտքի վերահսկողություն

access() մեթոդը կարող եք օգտագործել ստուգելու, թե ով ինչ իրավունք ունի entity-ի հետ։ Մեթոդը ընդունում է տարբեր օպերացիաներ, օրինակ՝ դիտում, թարմացում, ջնջում և ստեղծում։ Ստեղծումը մի փոքր յուրահատուկ է, տես ստորև։

Մուտքի ստուգումները փոխանցվում են access controller-ին։ (TODO: Լink ավելացնել)

// Ստուգեք entity-ի դիտման հասանելիությունը։
// Դրանք ստուգվում են ընթացիկ օգտվողի համար։
if ($entity->access('view')) {

}

// Ստուգեք, արդյոք տվյալ օգտվողը կարող է ջնջել entity-ն։
if ($entity->access('delete', $account)) {

}

Ստեղծման մուտքը ստուգելու ժամանակ entity դեռ գոյություն չունի։ Ստեղծելը պարզապես մուտքի ստուգման համար ծախսատար է։ Այս պատճառով ստեղծման մուտքը պետք է ստուգվի ուղղակիորեն access controller-ում։

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

Եթե entity-ն արդեն գոյություն ունի, $entity->access('create') նույնպես գործում է, որը ուղղակի վերանուետառում է createAccess() մեթոդին, ինչպես մյուս օպերացիաները վերաուղղորդվում են access() մեթոդին access controller-ում։

Նշում․ Կան ուղեցույցներ, որոնք օգտագործում են \Drupal::entityManager(), բայց 8.x-ում դա հնացել է և կհանվի 9.x-ում։ Դրա փոխարեն օգտագործեք \Drupal::entityTypeManager()։

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.