Ich habe ein Problem mit Drupal 8. Ich auf diese Weise einen Render-Array cachen versuchen:Drupal 8 Problem mit Caching machen Array
$meetingsView = [
'#theme' => 'meetings_view',
'#meetings_view' => $meetings,
'#months' => $this->monthsArray,
'#sidebar' => [
'#theme' => 'meetings_sidebar',
'#search_meetings_form' => $searchMeetingsForm,
],
'#language' => $language,
'#children' => $meetingRows,
'#attached' => [
'library' => [
'my_module/my_module',
],
'drupalSettings' => [
'siteUrl' => $base_url,
],
],
'#cache' => [
'keys' => ['meeting_views'],
'context' => [],
'tags' => ['http_response'],
'max-age' => 60,
],
];
ich es am Ende einer Controller-Methode Rückkehr zu einer Route gebunden um eine Liste von Meetings zu sehen.
Leider benutze die Seite nie mein maximales Alter (60 Sekunden).
Wenn ich
verwenden$cacheMetadata = new CacheableMetadata();
$cacheMetadata->setCacheContexts([]);
$cacheMetadata->setCacheMaxAge(60);
$cacheMetadata->setCacheTags([]);
$markup = $renderer->renderRoot($meetingsView);
$response = new HtmlResponse($markup, Response::HTTP_OK);
$response->addCacheableDependency($cacheMetadata);
und gebe die Antwort, wird die Seite erfolgreich mit der guten max-age zwischengespeichert, aber nicht das Thema Vorlage verwenden, und daher ohne Stil und Seiten-Markup erscheinen.
Könnten Sie mir bitte helfen, eine Lösung zu finden: entweder gelingt es, das Render-Array zwischenzuspeichern oder die Antwort in meinem Thema zu rendern.
Best,
PF
Ich glaube, ich könnte die Lösung gefunden haben. Innerhalb eines Renderarrays müssen Sie jedes untergeordnete Objekt (#children) zwischenspeichern, dh ein Cache-Array im Renderarray für jede Ebene Ihres Renderarrays erstellen. Daher habe ich eine cacheID basierend auf Abfrageparametern und Level (innerhalb der Schleife) erstellt und diese cid als Cache-Schlüssel verwendet. '$ cid = 'api:'. \ Drupal :: languageManager() -> getCurrentLanguage() -> getId(). ': Treffen:'. http_build_query ($ paramters, '', ':'); 'für das Eltern-Array, zum Beispiel. Ich werde den Thread aktualisieren, während ich weitere Tests mache. –
Alles scheint in Ordnung zu sein. Mein letztes Problem ist, dass die gleiche Seite aber von einem Formular aus einreichen nicht zwischengespeichert wird. Ich werde ermitteln. –