logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Controllo degli accessi + cacheability

03/10/2025, by Ivan

I controllori di accesso alla rotta, hook_entity_access() e qualsiasi elemento che deve restituire un oggetto AccessResultInterface, devono aggiungere le relative metainformazioni di cacheability.

Se non lo hai già fatto, leggi cache tags, cache contexts e max-age.

Parametri del controllo di accesso

Il controllore di accesso riceverà vari parametri – almeno l’account utente (AccountInterface) e spesso un oggetto. Successivamente prenderà decisioni basate sulle proprietà di questi parametri.

Una dipendenza di cache da $parameter deve essere aggiunta se la modifica di almeno una proprietà di quel parametro può cambiare il risultato dell’accesso.

Ad esempio:

$access_result = AccessResult::allowedIf($node->isPublished())
  // Il risultato di accesso dipende da una proprietà dell'oggetto che può cambiare: è una dipendenza cacheable.
  ->addCacheableDependency($node);

Un altro caso comune è quando il risultato di accesso dipende da una proprietà che non può cambiare (di solito un identificatore o un UUID). Ad esempio, consentire l’accesso se un dato account utente è il proprietario dell’oggetto:

$access_result = AccessResult::allowedIf($node->getOwnerId() === $account->id())
  // Il risultato di accesso dipende dal proprietario del nodo, che può cambiare.
  ->addCacheableDependency($node);

// Il risultato di accesso dipende anche da un account utente, ma l'ID dell'account non cambia mai.
// Quindi non è necessario aggiungere $account come dipendenza cacheable.

// Tuttavia, se $account è l'utente corrente e non un utente hardcoded,
// dobbiamo assicurarci che la cache vari per utente, così da non riutilizzare lo stesso
// risultato di accesso per tutti gli utenti.
if ($account->id() === \Drupal::currentUser()->id()) {
  $access_result->cachePerUser();
}