logo

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

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

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

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

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

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

Scroll

Մուտքի ստուգում + պահպանում (կեշավորություն)

19/06/2025, by Ivan

Մուտքի ստուգման գործիքները երթուղու համար, hook_entity_access() և այլ բոլոր մեթոդները, որոնք պետք է վերադարձնեն AccessResultInterface օբյեկտ, պետք է ավելացնեն համապատասխան կեշավորման մետատվյալներ։

Եթե դեռ չեք կարդացել, կարդացեք կեշի նշանները (cache tags), կեշի կոնտեքստները (cache contexts) և max-age մասին։

Մուտքի ստուգման պարամետրեր

Մուտքի ստուգման գործիքը կստանա տարբեր պարամետրեր՝ նվազագույնը օգտվողի հաշիվ (AccountInterface) և հաճախ օբյեկտ։ Այնուհետև կկատարի որոշում այդ պարամետրերի հատկությունների հիման վրա։

Եթե $parameter-ի որևէ մի հատկանիշի փոփոխությունը կփոխի մուտքի արդյունքը, պետք է ավելացվի կեշավորման կախվածություն $parameter-ից։

Օրինակ՝

$access_result = AccessResult::allowedIf($node->isPublished())
  // Մուտքի արդյունքը կախված է օբյեկտի այն հատկությունից, որը կարող է փոխվել՝ այդ պատճառով ավելացնում ենք կեշավորման կախվածություն։
  ->addCacheableDependency($node);

Մյուս տարածված դեպքը, երբ մուտքի արդյունքը կախված է հատկությունից, որը չփոխվի (օրինակ՝ նույնականիչ, UUID): Օրինակ՝ մուտք թույլատրել, եթե տվյալ օգտվողի հաշիվը հանդիսանում է օբյեկտի տերը՝

$access_result = AccessResult::allowedIf($node->getOwnerId() === $account->id())
  // Մուտքի արդյունքը կախված է կետից՝ տերը կարող է փոխվել։
  ->addCacheableDependency($node);

// Մուտքի արդյունքը նաև կախված է օգտվողի հաշվից, և օգտվողի հաշվի ID-ն երբեք չի փոխվի։ Ուստի, $account-ը կեշավորման կախվածություն ավելացնելու կարիք չկա։

// Սակայն, եթե $account-ը ներկա օգտվողն է, և ոչ մի կոդավորված օգտվող, ապա պետք է ապահովենք, որ մուտքի ստուգումը կատարվի յուրաքանչյուր օգտվողի համար տարբերակված, որպեսզի արդյունքը չկրկնօրինակվի բոլոր օգտվողների համար։
if ($account->id() === \Drupal::currentUser()->id()) {
  $access_result->cachePerUser();
}
Source authors:

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.