Մուտքի ստուգում + պահպանում (կեշավորություն)
Մուտքի ստուգման գործիքները երթուղու համար, 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(); }
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.