Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.
Pagina voorlezenongeveer 10 min
Wanneer je vanuit een package een eigen cachebackend wilt aanbieden, scheid je de Store die het opslaan implementeert van de Repository die de Laravel-API biedt. Wat je met Cache::extend() registreert, is de manier van aanmaken; Laravel pakt een geretourneerde Store niet automatisch in een Repository in.Deze pagina is gecontroleerd aan de hand van de implementatie van Laravel Framework v13.39.0. Zie Cache voor de basisbediening en Packageontwikkeling voor het voorbereiden van de provider.
De configuratie in cache.stores en de identifier van de aangemaakte Repository
Store
Illuminate\Cache\ArrayStore
Opslaan en ophalen van keys en beheer van de vervaltijd
Repository
Illuminate\Cache\Repository
remember(), TTL-conversie, cache-events enzovoort
CacheManager::build() roept een eigen aanmaakfunctie voor de driver uit de configuratie aan vóór de ingebouwde drivers, als die bestaat. Hergebruik dus geen namen als redis of array, maar gebruik een packagespecifieke naam.
Als een ander package de cache in zijn boot() gebruikt, kan het afhankelijk van de volgorde te laat zijn wanneer je de driver in je eigen boot() registreert. Registreer, in lijn met de officiële documentatie, in register() een booting-callback van de applicatie.Hieronder volgt een minimaal voorbeeld met de standaard ArrayStore, zodat je het registratiepad zonder externe service kunt controleren. Plaats het in src/MemoServiceProvider.php van het package Acme\Memo.
<?phpnamespace Acme\Memo;use Illuminate\Cache\ArrayStore;use Illuminate\Cache\Repository;use Illuminate\Contracts\Foundation\Application;use Illuminate\Support\ServiceProvider;class MemoServiceProvider extends ServiceProvider{ public function register(): void { $this->app->booting(static function (Application $app): void { $app['cache']->extend('acme-memory', static function ( Application $app, array $config, ): Repository { $store = new ArrayStore( $config['serialize'] ?? false, $app['config']->get('cache.serializable_classes'), ); return $app['cache']->repository($store, $config); }); }); }}
Laad de provider bijvoorbeeld via package auto-discovery. Maak deze provider, die alleen een uitbreiding registreert, geen deferred provider, zodat hij zowel bij HTTP als bij Artisan wordt geladen.
De booting van de applicatie wordt bij een normale start uitgevoerd nadat de register() van alle providers is voltooid en vóór elke boot(). Dit is iets anders dan $this->booting() van de provider zelf.
De callback van extend() ontvangt de applicatie en de configuratie-array van de store. Plaats het aanmaken van de Store en externe verbindingen in deze aanmaakcallback.
Dit registratiemoment garandeert niet dat cachegebruik binnen register() van andere providers werkt. Scheid het registreren van services van het daadwerkelijke gebruik.
Als je alleen een standaard in-memory cache nodig hebt, volstaat de array-driver. Dit voorbeeld dient om registratie en contracten uit te leggen en is niet geschikt voor delen tussen processen of persistentie. Vervang voor een eigen backend het aanmaken van de ArrayStore door een klasse die Illuminate\Contracts\Cache\Store implementeert.
CacheManager::extend() bindt de scope van anonieme closures opnieuw aan de Manager. Ga er niet van uit dat $this in een niet-statische closure de provider is, maar gebruik zoals in het voorbeeld een statische closure en het argument $app.
Voeg hem toe aan de bestaande stores-array in config/cache.php. Ontwerp het package niet zo dat het de default of de volledige stores van de gebruiker overschrijft.
use Illuminate\Support\Facades\Cache;$value = Cache::store('catalog')->remember('product:42', 60, function () { return ['id' => 42, 'name' => 'Sample'];});
Ook wanneer je hem als standaard wilt instellen, geef je in CACHE_STORE niet de drivernaam op, maar de storenaam catalog. Maak je meerdere configuraties met dezelfde driver, dan wordt per storenaam een aparte Repository aangemaakt.
CacheManager::callCustomCreator() retourneert de returnwaarde van de callback ongewijzigd. Retourneer je alleen een Store, dan werken get() en put() misschien wel, maar kun je bijvoorbeeld remember() van de Repository niet gebruiken en wordt de TTL anders geïnterpreteerd.De repository($store, $config) uit het voorbeeld zorgt voor het volgende:
De Store inpakken met Illuminate\Cache\Repository.
De store-naam die de Manager aan de configuratie heeft toegevoegd doorgeven aan de Repository.
Als er een event-Dispatcher is geregistreerd en de events-instelling niet is uitgeschakeld, de Dispatcher op de Repository instellen.
Dit past niet al je eigen instellingen toe op de Store. Verbindingsdoel, prefix, serialisatie en dergelijke verwerk je in de implementatie van de Store en in de aanmaakfunctie. Dat geldt ook voor serialize, dat in het voorbeeld uit de configuratie wordt gelezen.
Vergelijk het Store-contract met de huidige implementatie
Implementeer de methoden die Illuminate\Contracts\Cache\Store in Laravel 13 vereist. Distribueer een lijst met lege methoden uit oudere voorbeelden niet zomaar als werkende driver.
Methode
Te controleren gedrag
get() / many()
Niet gevonden of verlopen geeft null. many() retourneert een array met de opgevraagde keys als keys, met null voor niet-gevonden items
put() / putMany()
Opslaan met een TTL in seconden en succes of mislukking retourneren
forever()
Opslaan zonder vervaltijd. Dit betekent niet dat verdringing of verwijdering door de backend wordt voorkomen
touch()
De vervaltijd van een bestaande key wijzigen. Bij niet gevonden of verlopen false retourneren
increment() / decrement()
De bijgewerkte waarde of een mislukking retourneren. Verifieer ook gelijktijdige updates en het behoud van de TTL
forget()
De key verwijderen en het resultaat retourneren
flush()
De hele cache verwijderen. Maak duidelijk wat er daadwerkelijk wordt verwijderd
getPrefix()
De keyprefix retourneren die de Store gebruikt
null wordt door de Repository als cache-miss behandeld. Zorg dat de implementatie false of 0 niet als niet-gevonden behandelt. Ook als je null opslaat, werkt dat niet als markering die herberekening door remember() voorkomt.
Repository::put() verwerkt de TTL voordat die aan de Store wordt doorgegeven.
Aanroep op de Repository
Verwerking in de Store
put('key', $value)
forever()
put('key', $value, 60)
put() met het aantal seconden
put('key', $value, $expiresAt)
Omzetten van bijvoorbeeld een datum/tijd naar seconden en bij een positieve waarde put()
put('key', $value, 0) of een negatieve TTL
forget()
touch('key', 60)
touch()
touch('key', 0) of een negatieve TTL
forget()
De ArrayStore uit het voorbeeld slaat een item zonder vervaltijd op wanneer je rechtstreeks 0 seconden aan put() doorgeeft. put(..., 0) op de Repository betekent daarentegen verwijderen. Test je alleen de low-level Store die je met getStore() ophaalt, dan controleer je niet het gedrag van de API die gebruikers aanroepen.
Alleen het Store-contract implementeren garandeert niet dat alle cachefuncties worden ondersteund.
Atomische add(): maakt geen deel uit van het Store-contract. Wordt hij aangeroepen met een positieve TTL en heeft de Store een add(), dan gebruikt de Repository die. Zo niet, dan valt hij terug op get() en put(), dus alleen inpakken met een Repository garandeert geen atomiciteit. Implementeer het voor een gedeelde backend met de atomische bewerkingen van die backend en verifieer ook gelijktijdige uitvoering.
Locks: lock() en restoreLock() van Illuminate\Contracts\Cache\LockProvider vormen een apart contract. Verifieer verkrijgen, overeenkomst van de eigenaar, verlopen en dat locks van andere eigenaren niet worden vrijgegeven. De locks van de ArrayStore uit het voorbeeld bieden geen wederzijdse uitsluiting tussen verschillende processen.
Tags: de Repository controleert of de Store tags() heeft. Doorgaans is een implementatie met bijvoorbeeld TaggableStore nodig; met alleen het Store-contract worden tags niet automatisch ingeschakeld.
Ga er niet van uit dat flush() een gedeeltelijke verwijdering is die de prefix uit de configuratie respecteert. Controleer wat er op een gedeelde backend wordt verwijderd en leg dat, inclusief php artisan cache:clear, uit aan gebruikers.
Maak onderscheid tussen het vasthouden van instanties en het verwijderen van data
CacheManager is een singleton en houdt ook het resultaat van store('catalog') per storenaam vast. Alleen de configuratie wijzigen of extend() opnieuw registreren werkt een al aangemaakte Repository niet bij.
use Illuminate\Support\Facades\Cache;$before = Cache::store('catalog');config(['cache.stores.catalog.serialize' => false]);$same = Cache::store('catalog');Cache::forgetDriver('catalog');$after = Cache::store('catalog');
$same is hetzelfde object als $before. Bij het ophalen na forgetDriver() wordt $after aangemaakt op basis van de nieuwe configuratie.
Bewerking
Doel
Cache::forgetDriver('catalog')
Verwijdert de referentie naar de Repository die de Manager vasthoudt
Cache::store('catalog')->forget('key')
Verwijdert één opgeslagen key
Cache::store('catalog')->flush()
Verwijdert alle cachedata van de Store
forgetDriver() verwijdert niet alle data in de backend. Omdat de ArrayStore uit het voorbeeld de data in de instantie bewaart, zijn oude gegevens echter niet zichtbaar vanuit een nieuwe Store. Verder worden oude Repository-referenties die worden vastgehouden door $before aan de gebruikende kant of door de al geresolvede cache.store-singleton niet vervangen.Werk in productie de configuratiecache bij volgens je normale deployment en herstart langlopende workers. Houd ook rekening met de levensduur van services en behandel opnieuw resolven niet als een gelijktijdige update van alle processen.
Test niet alleen facade-mocks, maar ook het aanmaakpad
Laat in de testomgeving voor packages alles via de echte Manager en Repository lopen. Het volgende Testbench-voorbeeld controleert dat de driver ook bruikbaar is in de boot() van een andere provider die eerder is geregistreerd. In het voorbeeld wordt een array opgeslagen zonder de herstelbeperking van cache.serializable_classes te wijzigen, en wordt met ArrayStore::all(false) ook de ruwe opgeslagen waarde gecontroleerd.
Verifieer voor een eigen backend daarnaast verlopen items, niet-gevonden keys in many(), het heen en terug opslaan van false en 0, touch(), verbindingsstoringen, gelijktijdige updates, en de prefix en wat er wordt verwijderd. Beschouw het slagen van een simpele Cache::shouldReceive('get') niet als bewijs van driverregistratie of compatibiliteit met een externe service.
Maak de drivernaam, de storeconfiguratie, het serialisatieformaat en de exceptions en returnwaarden bij mislukking onderdeel van de publieke specificatie.
Controleer per ondersteunde Laravel-versie de methoden van het Store-contract en optionele functies zoals tags en locks.
Verifieer dat registratie ook werkt bij een verse start met configuratiecache en dat de driver vanuit de boot() van andere providers bruikbaar is.
Kondig compatibiliteitswijzigingen in opgeslagen data aan, inclusief het beleid voor het migreren of weggooien van bestaande keys.
Maak onderscheid tussen het vasthouden van instanties binnen een proces, de data in de backend en de configuratiecache.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Knowledge of Laravel","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146","dark":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/dark.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=a8a0340d86ff8aa90e9adfc98a0362d7","href":"/"},"favicon":"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/favicon.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=8f5a03a681c95d31803fc237b5811065","api":{"playground":{"display":"simple"}},"navbar":{},"footer":{"socials":{"github":"https://github.com/invokable"}},"seo":{"metatags":{"canonical":"https://kawax.biz"},"indexing":"all"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"navigation":{"languages":[{"language":"jp","default":true,"href":"jp/packages/laravel-boost-copilot-cli"},{"language":"en","href":"en/packages/laravel-boost-copilot-cli"},{"language":"de","href":"de/packages/laravel-boost-copilot-cli"},{"language":"es","href":"es/packages/laravel-boost-copilot-cli"},{"language":"fr","href":"fr/packages/laravel-boost-copilot-cli"},{"language":"it","href":"it/packages/laravel-boost-copilot-cli"},{"language":"ko","href":"ko/packages/laravel-boost-copilot-cli"},{"language":"nl","href":"nl/packages/laravel-boost-copilot-cli"},{"language":"zh-Hans","href":"zh-CN/packages/laravel-boost-copilot-cli"},{"language":"zh-Hant","href":"zh-TW/packages/laravel-boost-copilot-cli"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"invokable","hasAudioNarration":true,"actualSubdomain":"invokable","customDomains":["kawax.biz"],"gitSource":{"type":"github","owner":"kawax","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae3b81e20b92616c52730b6","collectionId":"dcfd0fdf-afc5-4921-b87f-97e730c28691","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae3b81e20b92616c52730b6"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae3b81e20b92616c52730b6","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"en","tag":"My Packages","count":145},{"language":"jp","tag":"マイパッケージ","count":145},{"language":"de","tag":"Meine Pakete","count":100},{"language":"es","tag":"Mis paquetes","count":100},{"language":"fr","tag":"Mes packages","count":100},{"language":"it","tag":"I miei pacchetti","count":100},{"language":"ko","tag":"My 패키지","count":100},{"language":"nl","tag":"Mijn packages","count":100},{"language":"zh-Hans","tag":"我的包","count":100},{"language":"zh-Hant","tag":"我的套件","count":100},{"language":"de","tag":"Fortgeschrittene Themen","count":70},{"language":"en","tag":"Advanced Topics","count":70},{"language":"es","tag":"Temas avanzados","count":70},{"language":"fr","tag":"Sujets avancés","count":70},{"language":"it","tag":"Argomenti avanzati","count":70},{"language":"jp","tag":"応用トピック","count":70},{"language":"ko","tag":"심화 주제","count":70},{"language":"nl","tag":"Geavanceerde onderwerpen","count":70},{"language":"zh-Hans","tag":"进阶主题","count":70},{"language":"zh-Hant","tag":"進階主題","count":70},{"language":"en","tag":"VOICEVOX","count":67},{"language":"jp","tag":"VOICEVOX","count":67},{"language":"de","tag":"Leitfaden","count":61},{"language":"en","tag":"Guide","count":61},{"language":"es","tag":"Guía","count":61},{"language":"fr","tag":"Guide","count":61},{"language":"it","tag":"Guida","count":61},{"language":"jp","tag":"ガイド","count":61},{"language":"ko","tag":"가이드","count":61},{"language":"nl","tag":"Gids","count":61},{"language":"zh-Hans","tag":"指南","count":61},{"language":"zh-Hant","tag":"指南","count":61},{"language":"de","tag":"Blog","count":46},{"language":"en","tag":"Blog","count":46},{"language":"es","tag":"Blog","count":46},{"language":"fr","tag":"Blog","count":46},{"language":"it","tag":"Blog","count":46},{"language":"jp","tag":"ブログ","count":46},{"language":"ko","tag":"블로그","count":46},{"language":"nl","tag":"Blog","count":46},{"language":"zh-Hans","tag":"博客","count":46},{"language":"zh-Hant","tag":"部落格","count":46},{"language":"en","tag":"VOICEVOX Engine API Reference","count":45},{"language":"jp","tag":"VOICEVOXエンジンAPIリファレンス","count":45},{"language":"de","tag":"GitHub Copilot","count":43},{"language":"en","tag":"GitHub Copilot","count":43},{"language":"es","tag":"GitHub Copilot","count":43},{"language":"fr","tag":"GitHub Copilot","count":43},{"language":"it","tag":"GitHub Copilot","count":43},{"language":"jp","tag":"GitHub Copilot","count":43},{"language":"ko","tag":"GitHub Copilot","count":43},{"language":"nl","tag":"GitHub Copilot","count":43},{"language":"zh-Hans","tag":"GitHub Copilot","count":43},{"language":"zh-Hant","tag":"GitHub Copilot","count":43},{"language":"de","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"en","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"es","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"fr","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"it","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"jp","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"ko","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"nl","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hans","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"zh-Hant","tag":"GitHub Copilot SDK for Laravel","count":41},{"language":"de","tag":"Tutorial","count":35},{"language":"en","tag":"Tutorial","count":35},{"language":"es","tag":"Tutorial","count":35},{"language":"fr","tag":"Tutoriel","count":35},{"language":"it","tag":"Tutorial","count":35},{"language":"jp","tag":"チュートリアル","count":35},{"language":"ko","tag":"튜토리얼","count":35},{"language":"nl","tag":"Tutorial","count":35},{"language":"zh-Hans","tag":"教程","count":35},{"language":"zh-Hant","tag":"教學","count":35},{"language":"de","tag":"Paketentwicklung","count":32},{"language":"en","tag":"Package Development","count":32},{"language":"es","tag":"Desarrollo de paquetes","count":32},{"language":"fr","tag":"Développement de packages","count":32},{"language":"it","tag":"Sviluppo di pacchetti","count":32},{"language":"jp","tag":"パッケージ開発","count":32},{"language":"ko","tag":"패키지 개발","count":32},{"language":"nl","tag":"Package-ontwikkeling","count":32},{"language":"zh-Hans","tag":"包开发","count":32},{"language":"zh-Hant","tag":"套件開發","count":32},{"language":"de","tag":"SDK","count":27},{"language":"es","tag":"SDK","count":27},{"language":"fr","tag":"SDK","count":27},{"language":"it","tag":"SDK","count":27},{"language":"ko","tag":"SDK","count":27},{"language":"nl","tag":"SDK","count":27},{"language":"zh-Hans","tag":"SDK","count":27},{"language":"zh-Hant","tag":"SDK","count":27},{"language":"de","tag":"VOICEVOX","count":22},{"language":"es","tag":"VOICEVOX","count":22},{"language":"fr","tag":"VOICEVOX","count":22},{"language":"it","tag":"VOICEVOX","count":22},{"language":"ko","tag":"VOICEVOX","count":22},{"language":"nl","tag":"VOICEVOX","count":22},{"language":"zh-Hans","tag":"VOICEVOX","count":22},{"language":"zh-Hant","tag":"VOICEVOX","count":22}],"searchSettings":{"isFiltersEnabled":false,"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"nl/advanced/package-cache-drivers","slug":"/nl/advanced/package-cache-drivers","pageMetadata":{"title":"Eigen cachestores en contracten voor packages","description":"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.","href":"/nl/advanced/package-cache-drivers"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Mermaid,Table,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Wanneer je vanuit een package een eigen cachebackend wilt aanbieden, scheid je `,_jsx(_components.strong,{children:`de Store die het opslaan implementeert`}),` van `,_jsx(_components.strong,{children:`de Repository die de Laravel-API biedt`}),`. Wat je met `,_jsx(_components.code,{children:`Cache::extend()`}),` registreert, is de manier van aanmaken; Laravel pakt een geretourneerde Store niet automatisch in een Repository in.`]}),`\n`,_jsxs(_components.p,{children:[`Deze pagina is gecontroleerd aan de hand van de implementatie van Laravel Framework `,_jsx(_components.code,{children:`v13.39.0`}),`. Zie `,_jsx(_components.a,{href:`/nl/cache`,children:`Cache`}),` voor de basisbediening en `,_jsx(_components.a,{href:`/nl/advanced/package-development`,children:`Packageontwikkeling`}),` voor het voorbereiden van de provider.`]}),`\n`,_jsx(Heading,{level:`2`,id:`scheid-de-drivernaam-van-de-storenaam`,children:`Scheid de drivernaam van de storenaam`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Element`}),_jsx(_components.th,{children:`Voorbeeld op deze pagina`}),_jsx(_components.th,{children:`Rol`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Drivernaam`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`acme-memory`})}),_jsxs(_components.td,{children:[`De aanmaakmethode die je met `,_jsx(_components.code,{children:`extend()`}),` registreert`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Storenaam`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`catalog`})}),_jsxs(_components.td,{children:[`De configuratie in `,_jsx(_components.code,{children:`cache.stores`}),` en de identifier van de aangemaakte Repository`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Store`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\ArrayStore`})}),_jsx(_components.td,{children:`Opslaan en ophalen van keys en beheer van de vervaltijd`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Repository`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\Repository`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`remember()`}),`, TTL-conversie, cache-events enzovoort`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::build()`}),` roept een eigen aanmaakfunctie voor de `,_jsx(_components.code,{children:`driver`}),` uit de configuratie aan vóór de ingebouwde drivers, als die bestaat. Hergebruik dus geen namen als `,_jsx(_components.code,{children:`redis`}),` of `,_jsx(_components.code,{children:`array`}),`, maar gebruik een packagespecifieke naam.`]}),`\n`,_jsx(Mermaid,{chart:`flowchart TD\n A[\"Cache::store('catalog')\"] --> B{\"Is catalog al geresolved?\"}\n B -->|Ja| C[\"Vastgehouden Repository retourneren\"]\n B -->|Nee| D[\"cache.stores.catalog inlezen\"]\n D --> E[\"Aanmaakfunctie voor driver: acme-memory\"]\n E --> F[\"Store aanmaken en\u003cbr>inpakken met repository()\"]\n F --> G[\"Vasthouden onder de naam catalog\"]`}),`\n`,_jsx(Heading,{level:`2`,id:`registreer-vóór-de-boot-van-andere-providers`,children:`Registreer vóór de boot van andere providers`}),`\n`,_jsxs(_components.p,{children:[`Als een ander package de cache in zijn `,_jsx(_components.code,{children:`boot()`}),` gebruikt, kan het afhankelijk van de volgorde te laat zijn wanneer je de driver in je eigen `,_jsx(_components.code,{children:`boot()`}),` registreert. Registreer, in lijn met de officiële documentatie, in `,_jsx(_components.code,{children:`register()`}),` een `,_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`booting`}),`-callback van de applicatie`]}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Hieronder volgt een minimaal voorbeeld met de standaard `,_jsx(_components.code,{children:`ArrayStore`}),`, zodat je het registratiepad zonder externe service kunt controleren. Plaats het in `,_jsx(_components.code,{children:`src/MemoServiceProvider.php`}),` van het package `,_jsx(_components.code,{children:`Acme\\\\Memo`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`28`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`28`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`php`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`namespace`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Acme\\\\Memo`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Contracts\\\\Foundation\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ServiceProvider`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` register`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`booting`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`static`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`extend`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`static`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Application`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` array`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $store`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'serialize'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`??`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.serializable_classes'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` );`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Laad de provider bijvoorbeeld via `,_jsx(_components.a,{href:`/nl/advanced/package-discovery`,children:`package auto-discovery`}),`. Maak deze provider, die alleen een uitbreiding registreert, geen deferred provider, zodat hij zowel bij HTTP als bij Artisan wordt geladen.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`De `,_jsx(_components.code,{children:`booting`}),` van de applicatie wordt bij een normale start uitgevoerd nadat de `,_jsx(_components.code,{children:`register()`}),` van alle providers is voltooid en vóór elke `,_jsx(_components.code,{children:`boot()`}),`. Dit is iets anders dan `,_jsx(_components.code,{children:`$this->booting()`}),` van de provider zelf.`]}),`\n`,_jsxs(_components.li,{children:[`De callback van `,_jsx(_components.code,{children:`extend()`}),` ontvangt de applicatie en de configuratie-array van de store. Plaats het aanmaken van de Store en externe verbindingen in deze aanmaakcallback.`]}),`\n`,_jsxs(_components.li,{children:[`Dit registratiemoment garandeert niet dat `,_jsxs(_components.strong,{children:[`cachegebruik binnen `,_jsx(_components.code,{children:`register()`})]}),` van andere providers werkt. Scheid het registreren van services van het daadwerkelijke gebruik.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Als je alleen een standaard in-memory cache nodig hebt, volstaat de `,_jsx(_components.code,{children:`array`}),`-driver. Dit voorbeeld dient om registratie en contracten uit te leggen en is niet geschikt voor delen tussen processen of persistentie. Vervang voor een eigen backend het aanmaken van de `,_jsx(_components.code,{children:`ArrayStore`}),` door een klasse die `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\Store`}),` implementeert.`]})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::extend()`}),` bindt de scope van anonieme closures opnieuw aan de Manager. Ga er niet van uit dat `,_jsx(_components.code,{children:`$this`}),` in een niet-statische closure de provider is, maar gebruik zoals in het voorbeeld een statische closure en het argument `,_jsx(_components.code,{children:`$app`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`voeg-de-store-toe-in-de-gebruikende-applicatie`,children:`Voeg de store toe in de gebruikende applicatie`}),`\n`,_jsxs(_components.p,{children:[`Voeg hem toe aan de bestaande `,_jsx(_components.code,{children:`stores`}),`-array in `,_jsx(_components.code,{children:`config/cache.php`}),`. Ontwerp het package niet zo dat het de `,_jsx(_components.code,{children:`default`}),` of de volledige `,_jsx(_components.code,{children:`stores`}),` van de gebruiker overschrijft.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'driver'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`remember`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`function`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` () {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'id'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 42`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'name'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Sample'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Ook wanneer je hem als standaard wilt instellen, geef je in `,_jsx(_components.code,{children:`CACHE_STORE`}),` niet de drivernaam op, maar `,_jsxs(_components.strong,{children:[`de storenaam `,_jsx(_components.code,{children:`catalog`})]}),`. Maak je meerdere configuraties met dezelfde driver, dan wordt per storenaam een aparte Repository aangemaakt.`]}),`\n`,_jsx(Heading,{level:`2`,id:`stel-de-repository-zelf-samen`,children:`Stel de Repository zelf samen`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager::callCustomCreator()`}),` retourneert de returnwaarde van de callback ongewijzigd. Retourneer je alleen een Store, dan werken `,_jsx(_components.code,{children:`get()`}),` en `,_jsx(_components.code,{children:`put()`}),` misschien wel, maar kun je bijvoorbeeld `,_jsx(_components.code,{children:`remember()`}),` van de Repository niet gebruiken en wordt de TTL anders geïnterpreteerd.`]}),`\n`,_jsxs(_components.p,{children:[`De `,_jsx(_components.code,{children:`repository($store, $config)`}),` uit het voorbeeld zorgt voor het volgende:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`De Store inpakken met `,_jsx(_components.code,{children:`Illuminate\\\\Cache\\\\Repository`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`De `,_jsx(_components.code,{children:`store`}),`-naam die de Manager aan de configuratie heeft toegevoegd doorgeven aan de Repository.`]}),`\n`,_jsxs(_components.li,{children:[`Als er een event-Dispatcher is geregistreerd en de `,_jsx(_components.code,{children:`events`}),`-instelling niet is uitgeschakeld, de Dispatcher op de Repository instellen.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Dit past niet al je eigen instellingen toe op de Store. Verbindingsdoel, prefix, serialisatie en dergelijke verwerk je in de implementatie van de Store en in de aanmaakfunctie. Dat geldt ook voor `,_jsx(_components.code,{children:`serialize`}),`, dat in het voorbeeld uit de configuratie wordt gelezen.`]}),`\n`,_jsx(Heading,{level:`2`,id:`vergelijk-het-store-contract-met-de-huidige-implementatie`,children:`Vergelijk het Store-contract met de huidige implementatie`}),`\n`,_jsxs(_components.p,{children:[`Implementeer de methoden die `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\Store`}),` in Laravel 13 vereist. Distribueer een lijst met lege methoden uit oudere voorbeelden niet zomaar als werkende driver.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Methode`}),_jsx(_components.th,{children:`Te controleren gedrag`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`get()`}),` / `,_jsx(_components.code,{children:`many()`})]}),_jsxs(_components.td,{children:[`Niet gevonden of verlopen geeft `,_jsx(_components.code,{children:`null`}),`. `,_jsx(_components.code,{children:`many()`}),` retourneert een array met de opgevraagde keys als keys, met `,_jsx(_components.code,{children:`null`}),` voor niet-gevonden items`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put()`}),` / `,_jsx(_components.code,{children:`putMany()`})]}),_jsx(_components.td,{children:`Opslaan met een TTL in seconden en succes of mislukking retourneren`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`forever()`})}),_jsx(_components.td,{children:`Opslaan zonder vervaltijd. Dit betekent niet dat verdringing of verwijdering door de backend wordt voorkomen`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`touch()`})}),_jsxs(_components.td,{children:[`De vervaltijd van een bestaande key wijzigen. Bij niet gevonden of verlopen `,_jsx(_components.code,{children:`false`}),` retourneren`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`increment()`}),` / `,_jsx(_components.code,{children:`decrement()`})]}),_jsx(_components.td,{children:`De bijgewerkte waarde of een mislukking retourneren. Verifieer ook gelijktijdige updates en het behoud van de TTL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})}),_jsx(_components.td,{children:`De key verwijderen en het resultaat retourneren`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`flush()`})}),_jsx(_components.td,{children:`De hele cache verwijderen. Maak duidelijk wat er daadwerkelijk wordt verwijderd`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`getPrefix()`})}),_jsx(_components.td,{children:`De keyprefix retourneren die de Store gebruikt`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`null`}),` wordt door de Repository als cache-miss behandeld. Zorg dat de implementatie `,_jsx(_components.code,{children:`false`}),` of `,_jsx(_components.code,{children:`0`}),` niet als niet-gevonden behandelt. Ook als je `,_jsx(_components.code,{children:`null`}),` opslaat, werkt dat niet als markering die herberekening door `,_jsx(_components.code,{children:`remember()`}),` voorkomt.`]}),`\n`,_jsx(Heading,{level:`3`,id:`verifieer-de-ttl-via-de-repository`,children:`Verifieer de TTL via de Repository`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Repository::put()`}),` verwerkt de TTL voordat die aan de Store wordt doorgegeven.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Aanroep op de Repository`}),_jsx(_components.th,{children:`Verwerking in de Store`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forever()`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value, 60)`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put()`}),` met het aantal seconden`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`put('key', $value, $expiresAt)`})}),_jsxs(_components.td,{children:[`Omzetten van bijvoorbeeld een datum/tijd naar seconden en bij een positieve waarde `,_jsx(_components.code,{children:`put()`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`put('key', $value, 0)`}),` of een negatieve TTL`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`touch('key', 60)`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`touch()`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`touch('key', 0)`}),` of een negatieve TTL`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`forget()`})})]})]})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`De `,_jsx(_components.code,{children:`ArrayStore`}),` uit het voorbeeld slaat een item zonder vervaltijd op wanneer je rechtstreeks `,_jsx(_components.code,{children:`0`}),` seconden aan `,_jsx(_components.code,{children:`put()`}),` doorgeeft. `,_jsx(_components.code,{children:`put(..., 0)`}),` op de Repository betekent daarentegen verwijderen. Test je alleen de low-level Store die je met `,_jsx(_components.code,{children:`getStore()`}),` ophaalt, dan controleer je niet het gedrag van de API die gebruikers aanroepen.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`controleer-add-locks-en-tags-afzonderlijk`,children:`Controleer add, locks en tags afzonderlijk`}),`\n`,_jsx(_components.p,{children:`Alleen het Store-contract implementeren garandeert niet dat alle cachefuncties worden ondersteund.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Atomische `,_jsx(_components.code,{children:`add()`})]}),`: maakt geen deel uit van het Store-contract. Wordt hij aangeroepen met een positieve TTL en heeft de Store een `,_jsx(_components.code,{children:`add()`}),`, dan gebruikt de Repository die. Zo niet, dan valt hij terug op `,_jsx(_components.code,{children:`get()`}),` en `,_jsx(_components.code,{children:`put()`}),`, dus alleen inpakken met een Repository garandeert geen atomiciteit. Implementeer het voor een gedeelde backend met de atomische bewerkingen van die backend en verifieer ook gelijktijdige uitvoering.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Locks`}),`: `,_jsx(_components.code,{children:`lock()`}),` en `,_jsx(_components.code,{children:`restoreLock()`}),` van `,_jsx(_components.code,{children:`Illuminate\\\\Contracts\\\\Cache\\\\LockProvider`}),` vormen een apart contract. Verifieer verkrijgen, overeenkomst van de eigenaar, verlopen en dat locks van andere eigenaren niet worden vrijgegeven. De locks van de `,_jsx(_components.code,{children:`ArrayStore`}),` uit het voorbeeld bieden geen wederzijdse uitsluiting tussen verschillende processen.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Tags`}),`: de Repository controleert of de Store `,_jsx(_components.code,{children:`tags()`}),` heeft. Doorgaans is een implementatie met bijvoorbeeld `,_jsx(_components.code,{children:`TaggableStore`}),` nodig; met alleen het Store-contract worden tags niet automatisch ingeschakeld.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Ga er niet van uit dat `,_jsx(_components.code,{children:`flush()`}),` een gedeeltelijke verwijdering is die de prefix uit de configuratie respecteert. Controleer wat er op een gedeelde backend wordt verwijderd en leg dat, inclusief `,_jsx(_components.code,{children:`php artisan cache:clear`}),`, uit aan gebruikers.`]}),`\n`,_jsx(Heading,{level:`2`,id:`maak-onderscheid-tussen-het-vasthouden-van-instanties-en-het-verwijderen-van-data`,children:`Maak onderscheid tussen het vasthouden van instanties en het verwijderen van data`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`CacheManager`}),` is een singleton en houdt ook het resultaat van `,_jsx(_components.code,{children:`store('catalog')`}),` per storenaam vast. Alleen de configuratie wijzigen of `,_jsx(_components.code,{children:`extend()`}),` opnieuw registreren werkt een al aangemaakte Repository niet bij.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`11`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog.serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$same`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forgetDriver`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`$same`}),` is hetzelfde object als `,_jsx(_components.code,{children:`$before`}),`. Bij het ophalen na `,_jsx(_components.code,{children:`forgetDriver()`}),` wordt `,_jsx(_components.code,{children:`$after`}),` aangemaakt op basis van de nieuwe configuratie.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Bewerking`}),_jsx(_components.th,{children:`Doel`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::forgetDriver('catalog')`})}),_jsx(_components.td,{children:`Verwijdert de referentie naar de Repository die de Manager vasthoudt`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::store('catalog')->forget('key')`})}),_jsx(_components.td,{children:`Verwijdert één opgeslagen key`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Cache::store('catalog')->flush()`})}),_jsx(_components.td,{children:`Verwijdert alle cachedata van de Store`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`forgetDriver()`}),` verwijdert niet alle data in de backend. Omdat de `,_jsx(_components.code,{children:`ArrayStore`}),` uit het voorbeeld de data in de instantie bewaart, zijn oude gegevens echter niet zichtbaar vanuit een nieuwe Store. Verder worden oude Repository-referenties die worden vastgehouden door `,_jsx(_components.code,{children:`$before`}),` aan de gebruikende kant of door de al geresolvede `,_jsx(_components.code,{children:`cache.store`}),`-singleton niet vervangen.`]}),`\n`,_jsxs(_components.p,{children:[`Werk in productie de configuratiecache bij volgens je normale deployment en herstart langlopende workers. Houd ook rekening met de `,_jsx(_components.a,{href:`/nl/advanced/package-service-lifetimes`,children:`levensduur van services`}),` en behandel opnieuw resolven niet als een gelijktijdige update van alle processen.`]}),`\n`,_jsx(Heading,{level:`2`,id:`test-niet-alleen-facade-mocks-maar-ook-het-aanmaakpad`,children:`Test niet alleen facade-mocks, maar ook het aanmaakpad`}),`\n`,_jsxs(_components.p,{children:[`Laat in de `,_jsx(_components.a,{href:`/nl/advanced/package-testing`,children:`testomgeving voor packages`}),` alles via de echte Manager en Repository lopen. Het volgende Testbench-voorbeeld controleert dat de driver ook bruikbaar is in de `,_jsx(_components.code,{children:`boot()`}),` van een andere provider die eerder is geregistreerd. In het voorbeeld wordt een array opgeslagen zonder de herstelbeperking van `,_jsx(_components.code,{children:`cache.serializable_classes`}),` te wijzigen, en wordt met `,_jsx(_components.code,{children:`ArrayStore::all(false)`}),` ook de ruwe opgeslagen waarde gecontroleerd.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`87`,language:`php`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`php`,children:_jsxs(_components.code,{language:`php`,numberOfLines:`87`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`\u003c?`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`php`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`namespace`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Acme\\\\Memo\\\\Tests`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Acme\\\\Memo\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Cache\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\Facades\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Illuminate\\\\Support\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ServiceProvider`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`use`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` Orchestra\\\\Testbench\\\\`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`TestCase`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` CacheConsumerProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` ServiceProvider`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` boot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` PackageCacheTest`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` extends`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` TestCase`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` protected`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` getPackageProviders`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` array`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`CacheConsumerProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`MemoServiceProvider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` protected`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` defineEnvironment`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.default'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'array'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $app`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'config'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`set`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'driver'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'acme-memory'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_the_driver_is_available_during_another_providers_boot`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertInstanceOf`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Repository`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertInstanceOf`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`ArrayStore`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNotNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getEventDispatcher`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`());`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_serialization_is_applied_from_the_store_configuration`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'status'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'queued'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`put`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`serialize`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`), `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`all`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'value'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_a_zero_ttl_deletes_the_item_through_the_repository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'old'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertTrue`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`put`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'new'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'product:42'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` public`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` function`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` test_forgetting_a_driver_rebuilds_only_the_manager_reference`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` void`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` config`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`([`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'cache.stores.catalog.serialize'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forgetDriver`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` Cache`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`::`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`store`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'catalog'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNotSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'ready'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$before`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertNull`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'boot-marker'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $value`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'status'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =>`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'queued'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`];`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` $after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forever`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`get`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` $this`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`assertSame`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$value`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$after`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getStore`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`()`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`->`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`all`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'job'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'value'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Verifieer voor een eigen backend daarnaast verlopen items, niet-gevonden keys in `,_jsx(_components.code,{children:`many()`}),`, het heen en terug opslaan van `,_jsx(_components.code,{children:`false`}),` en `,_jsx(_components.code,{children:`0`}),`, `,_jsx(_components.code,{children:`touch()`}),`, verbindingsstoringen, gelijktijdige updates, en de prefix en wat er wordt verwijderd. Beschouw het slagen van een simpele `,_jsx(_components.code,{children:`Cache::shouldReceive('get')`}),` niet als bewijs van driverregistratie of compatibiliteit met een externe service.`]}),`\n`,_jsx(Heading,{level:`2`,id:`checklist-voor-langdurig-onderhoud`,children:`Checklist voor langdurig onderhoud`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Maak de drivernaam, de storeconfiguratie, het serialisatieformaat en de exceptions en returnwaarden bij mislukking onderdeel van de publieke specificatie.`}),`\n`,_jsx(_components.li,{children:`Controleer per ondersteunde Laravel-versie de methoden van het Store-contract en optionele functies zoals tags en locks.`}),`\n`,_jsxs(_components.li,{children:[`Verifieer dat registratie ook werkt bij een verse start met configuratiecache en dat de driver vanuit de `,_jsx(_components.code,{children:`boot()`}),` van andere providers bruikbaar is.`]}),`\n`,_jsx(_components.li,{children:`Kondig compatibiliteitswijzigingen in opgeslagen data aan, inclusief het beleid voor het migreren of weggooien van bestaande keys.`}),`\n`,_jsx(_components.li,{children:`Maak onderscheid tussen het vasthouden van instanties binnen een proces, de data in de backend en de configuratiecache.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`geraadpleegde-primaire-bronnen`,children:`Geraadpleegde primaire bronnen`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/docs/blob/960eedf0911155ad16326ade49c0ea5d18eda0b8/cache.md#adding-custom-cache-drivers`,children:`Officiële Laravel-documentatie: eigen cachedrivers`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/CacheManager.php`,children:`CacheManager: build, repository, extend en forgetDriver`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/Repository.php`,children:`Repository: TTL-conversie, add, tags en events`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Contracts/Cache/Store.php`,children:`Store-contract`}),` / `,_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Contracts/Cache/LockProvider.php`,children:`LockProvider-contract`})]}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/ArrayStore.php`,children:`ArrayStore: opslaan, vervaltijd en serialisatie`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Cache/CacheServiceProvider.php`,children:`CacheServiceProvider: singletonregistratie van de Manager en cache.store`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/src/Illuminate/Foundation/Application.php`,children:`Application: booting van de applicatie en boot van providers`})}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/tests/Cache/CacheManagerTest.php`,children:`Officiële Laravel-tests: CacheManagerTest`}),` / `,_jsx(_components.a,{href:`https://github.com/laravel/framework/blob/v13.39.0/tests/Cache/CacheRepositoryTest.php`,children:`CacheRepositoryTest`})]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Eigen cachestores en contracten voor packages","description":"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.","href":"/nl/advanced/package-cache-drivers"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Scheid de drivernaam van de storenaam","slug":"scheid-de-drivernaam-van-de-storenaam","depth":2,"children":[]},{"title":"Registreer vóór de boot van andere providers","slug":"registreer-vóór-de-boot-van-andere-providers","depth":2,"children":[{"title":"Voeg de store toe in de gebruikende applicatie","slug":"voeg-de-store-toe-in-de-gebruikende-applicatie","depth":3,"children":[]}]},{"title":"Stel de Repository zelf samen","slug":"stel-de-repository-zelf-samen","depth":2,"children":[]},{"title":"Vergelijk het Store-contract met de huidige implementatie","slug":"vergelijk-het-store-contract-met-de-huidige-implementatie","depth":2,"children":[{"title":"Verifieer de TTL via de Repository","slug":"verifieer-de-ttl-via-de-repository","depth":3,"children":[]},{"title":"Controleer add, locks en tags afzonderlijk","slug":"controleer-add-locks-en-tags-afzonderlijk","depth":3,"children":[]}]},{"title":"Maak onderscheid tussen het vasthouden van instanties en het verwijderen van data","slug":"maak-onderscheid-tussen-het-vasthouden-van-instanties-en-het-verwijderen-van-data","depth":2,"children":[]},{"title":"Test niet alleen facade-mocks, maar ook het aanmaakpad","slug":"test-niet-alleen-facade-mocks-maar-ook-het-aanmaakpad","depth":2,"children":[]},{"title":"Checklist voor langdurig onderhoud","slug":"checklist-voor-langdurig-onderhoud","depth":2,"children":[]},{"title":"Geraadpleegde primaire bronnen","slug":"geraadpleegde-primaire-bronnen","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"narration":{"path":"nl/advanced/package-cache-drivers","locale":"nl","estimatedDurationSec":582},"subdomain":"invokable","siteName":"Knowledge of Laravel","title":"Eigen cachestores en contracten voor packages - Knowledge of Laravel","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"jp":{"href":"/jp/advanced/package-cache-drivers","matchLevel":1},"en":{"href":"/en/advanced/package-cache-drivers","matchLevel":1},"de":{"href":"/de/advanced/package-cache-drivers","matchLevel":1},"es":{"href":"/es/advanced/package-cache-drivers","matchLevel":1},"fr":{"href":"/fr/advanced/package-cache-drivers","matchLevel":1},"it":{"href":"/it/advanced/package-cache-drivers","matchLevel":1},"ko":{"href":"/ko/advanced/package-cache-drivers","matchLevel":1},"nl":{"href":"/nl/advanced/package-cache-drivers","matchLevel":0},"zh-Hans":{"href":"/zh-CN/advanced/package-cache-drivers","matchLevel":1},"zh-Hant":{"href":"/zh-TW/advanced/package-cache-drivers","matchLevel":1}}},"lastModified":"2026-10-29T21:18:32.801Z","gitLastModified":"2026-10-29T21:17:56.000Z","originalFileLocation":"nl/advanced/package-cache-drivers.mdx","locale":"nl"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Eigen cachestores en contracten voor packages - Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:description\" content=\"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://kawax.biz/nl/advanced/package-cache-drivers\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://invokable.mintlify.app/_mintlify/api/og/v2?division=Package-ontwikkeling\u0026amp;title=Eigen+cachestores+en+contracten+voor+packages\u0026amp;description=Ontleed+de+CacheManager+en+het+Store-contract+van+Laravel+13+en+verifieer+het+registratiemoment+van+drivers%2C+de+TTL-conversie+door+de+Repository%2C+het+vasthouden\u0026amp;theme=e73cb59538246989d21d6ff5\u0026amp;signature=454e94d6b9fdb99b211cb4cabaa23472db2b2b71b43cde638905c146d4a3ac82\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Eigen cachestores en contracten voor packages - Knowledge of Laravel\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://invokable.mintlify.app/_mintlify/api/og/v2?division=Package-ontwikkeling\u0026amp;title=Eigen+cachestores+en+contracten+voor+packages\u0026amp;description=Ontleed+de+CacheManager+en+het+Store-contract+van+Laravel+13+en+verifieer+het+registratiemoment+van+drivers%2C+de+TTL-conversie+door+de+Repository%2C+het+vasthouden\u0026amp;theme=e73cb59538246989d21d6ff5\u0026amp;signature=454e94d6b9fdb99b211cb4cabaa23472db2b2b71b43cde638905c146d4a3ac82\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/invokable/pboFjibLpJPX3oCo/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Knowledge of Laravel\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://kawax.biz/nl/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/nl/advanced/package-cache-drivers.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"nl\" href=\"https://kawax.biz/nl/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://kawax.biz/jp/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://kawax.biz/en/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://kawax.biz/de/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://kawax.biz/es/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"fr\" href=\"https://kawax.biz/fr/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"it\" href=\"https://kawax.biz/it/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://kawax.biz/ko/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https://kawax.biz/zh-CN/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh-Hant\" href=\"https://kawax.biz/zh-TW/advanced/package-cache-drivers\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://kawax.biz/jp/advanced/package-cache-drivers\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://kawax.biz/#organization\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/invokable/AuZ0xql2mAbUyZ99/logo/light.svg?fit=max\u0026auto=format\u0026n=AuZ0xql2mAbUyZ99\u0026q=85\u0026s=df0b7397202a6aa1c1f321620c5aa146\"}},{\"@type\":\"WebSite\",\"@id\":\"https://kawax.biz#website\",\"name\":\"Knowledge of Laravel\",\"url\":\"https://kawax.biz\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://kawax.biz/nl/advanced/package-cache-drivers#webpage\",\"url\":\"https://kawax.biz/nl/advanced/package-cache-drivers\",\"name\":\"Eigen cachestores en contracten voor packages\",\"description\":\"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\",\"dateModified\":\"2026-10-29T21:17:56.000Z\",\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"},\"breadcrumb\":{\"@id\":\"https://kawax.biz/nl/advanced/package-cache-drivers#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://kawax.biz/nl/advanced/package-cache-drivers#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Package-ontwikkeling\",\"item\":\"https://kawax.biz/nl/advanced/package-development\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Eigen cachestores en contracten voor packages\",\"item\":\"https://kawax.biz/nl/advanced/package-cache-drivers\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://kawax.biz/nl/advanced/package-cache-drivers#article\",\"headline\":\"Eigen cachestores en contracten voor packages\",\"name\":\"Eigen cachestores en contracten voor packages\",\"description\":\"Ontleed de CacheManager en het Store-contract van Laravel 13 en verifieer het registratiemoment van drivers, de TTL-conversie door de Repository, het vasthouden van instanties en de ondersteuning van onder meer locks.\",\"url\":\"https://kawax.biz/nl/advanced/package-cache-drivers\",\"mainEntityOfPage\":{\"@id\":\"https://kawax.biz/nl/advanced/package-cache-drivers#webpage\"},\"dateModified\":\"2026-10-29T21:17:56.000Z\",\"publisher\":{\"@id\":\"https://kawax.biz/#organization\"},\"isPartOf\":{\"@id\":\"https://kawax.biz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Knowledge of Laravel\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Knowledge of Laravel","nav":{"global":null,"languages":[{"language":"jp","default":true,"pages":[{"title":"jp","href":"/jp/advanced/package-cache-drivers"}]},{"language":"en","pages":[{"title":"en","href":"/en/advanced/package-cache-drivers"}]},{"language":"de","pages":[{"title":"de","href":"/de/advanced/package-cache-drivers"}]},{"language":"es","pages":[{"title":"es","href":"/es/advanced/package-cache-drivers"}]},{"language":"fr","pages":[{"title":"fr","href":"/fr/advanced/package-cache-drivers"}]},{"language":"it","pages":[{"title":"it","href":"/it/advanced/package-cache-drivers"}]},{"language":"ko","pages":[{"title":"ko","href":"/ko/advanced/package-cache-drivers"}]},{"language":"nl","tabs":[{"tab":"Mijn packages","pages":[{"title":"Mijn packages","href":"/nl/packages/laravel-boost-copilot-cli"}]},{"tab":"Tutorial","pages":[{"title":"Tutorial","href":"/nl/introduction"}]},{"tab":"Gids","pages":[{"title":"Gids","href":"/nl/lifecycle"}]},{"tab":"Geavanceerde onderwerpen","groups":[{"group":"AI-ontwikkeling","pages":[{"title":"Een MCP-server bouwen met Laravel","href":"/nl/advanced/mcp-server"},{"title":"Een custom agent voor Boost maken","href":"/nl/advanced/boost-custom-agent"},{"title":"Een custom provider voor de AI SDK maken","href":"/nl/advanced/ai-sdk-custom-provider"},{"title":"Agentmiddleware in de Laravel AI SDK","href":"/nl/advanced/ai-sdk-agent-middleware"}]},{"group":"Design patterns","pages":[{"title":"Het Pipeline-patroon","href":"/nl/advanced/pipeline"},{"title":"Fluent-klasse","href":"/nl/advanced/fluent"},{"title":"Macroable-trait","href":"/nl/advanced/macroable"},{"title":"Conditionable-trait","href":"/nl/advanced/conditionable"},{"title":"InteractsWithTime-trait","href":"/nl/advanced/interacts-with-time"},{"title":"ForwardsCalls-trait","href":"/nl/advanced/forwards-calls"},{"title":"De tap()-helper en de Tappable-trait","href":"/nl/advanced/tap"},{"title":"De interne implementatie van de once()-helper — Once, Onceable en PreventsCircularRecursion","href":"/nl/advanced/once-helper"},{"title":"Dumpable-trait","href":"/nl/advanced/dumpable"},{"title":"Support Contracts (Arrayable / Jsonable / Htmlable / Responsable)","href":"/nl/advanced/support-contracts"},{"title":"Lottery-klasse","href":"/nl/advanced/lottery"},{"title":"Higher-order messages van collecties","href":"/nl/advanced/higher-order-messages"},{"title":"Collection deep dive","href":"/nl/advanced/collection-deep-dive"},{"title":"Illuminate\\Support\\Manager — anatomie van het driversysteem","href":"/nl/advanced/manager"},{"title":"PHP Reflection API","href":"/nl/advanced/php-reflection"},{"title":"PHP FFI","href":"/nl/advanced/ffi"},{"title":"PHP AST","href":"/nl/advanced/php-ast"}]},{"group":"Package-ontwikkeling","pages":[{"title":"Laravel-packages ontwikkelen","href":"/nl/advanced/package-development"},{"title":"De interne structuur van package discovery","href":"/nl/advanced/package-discovery"},{"title":"InteractsWithData-trait","href":"/nl/advanced/interacts-with-data"},{"title":"Uitgestelde service providers","href":"/nl/advanced/deferred-provider"},{"title":"Versiecompatibiliteit van packages beheren","href":"/nl/advanced/package-versioning"},{"title":"GitHub Actions pinnen en beveiliging","href":"/nl/advanced/github-actions-pinning"},{"title":"CHANGELOG en releasebeheer voor packages","href":"/nl/advanced/package-changelog"},{"title":"Laravel-packages testen met Orchestra Testbench","href":"/nl/advanced/package-testing"},{"title":"Packageontwikkeling met Testbench Workbench","href":"/nl/advanced/package-workbench"},{"title":"GeneratorCommand — eigen make: commando's implementeren","href":"/nl/advanced/generator-command"},{"title":"Een Laravel starter kit maken","sidebarTitle":"Starter kit maken","href":"/nl/advanced/starter-kit-creation"},{"title":"Statische analyse van packages (PHPStan / Larastan)","href":"/nl/advanced/package-static-analysis"},{"title":"Packageconfiguratie samenvoegen en cachen","href":"/nl/advanced/package-config-merging"},{"title":"Migrations van packages publiceren en bijwerken","href":"/nl/advanced/package-migrations"},{"title":"Views van packages overschrijven en bijwerken","href":"/nl/advanced/package-views"},{"title":"Routes van packages registreren en cachen","href":"/nl/advanced/package-routes"},{"title":"Packagecaches integreren in optimize","href":"/nl/advanced/package-optimization"},{"title":"Publieke assets van packages publiceren en bijwerken","href":"/nl/advanced/package-assets"},{"title":"Packagevertalingen overschrijven en bijwerken","href":"/nl/advanced/package-translations"},{"title":"Hooks na het resolven van packageservices","href":"/nl/advanced/package-service-resolution"},{"title":"Diagnostische package-informatie toevoegen aan about","href":"/nl/advanced/package-about"},{"title":"Artisan-commands van een package registreren en afhankelijkheden resolven","href":"/nl/advanced/package-commands"},{"title":"Event listeners van een package registreren en cachen","href":"/nl/advanced/package-events"},{"title":"Levensduur van packageservices ontwerpen","href":"/nl/advanced/package-service-lifetimes"},{"title":"Middleware van packages registreren en het toepassingsbereik","href":"/nl/advanced/package-middleware"},{"title":"Blade-extensies van packages en de compilatiecache","href":"/nl/advanced/package-blade-extensions"},{"title":"Storage-drivers registreren in een package en opnieuw resolven","href":"/nl/advanced/package-filesystem-drivers"},{"title":"Aangepaste notificatiekanalen in een package en verificatie van de bezorging","href":"/nl/advanced/package-notification-channels"},{"title":"Containertags in packages en het bundelen van plugins","href":"/nl/advanced/package-container-tags"},{"title":"HTTP-clients en tests voor packages","href":"/nl/advanced/package-http-client"},{"title":"Logchannels voor packages uitbreiden en opnieuw resolven","description":"Kies tussen custom en via en LogManager::extend() in Laravel 13, en test logfunctionaliteit met oog voor het vasthouden van channels, forgetChannel() en fallbacks.","href":"/nl/advanced/package-logging"},{"title":"Eigen cachestores en contracten voor packages","href":"/nl/advanced/package-cache-drivers"}]},{"group":"Applicatiestructuur","pages":[{"title":"Applicatiestructuur van Laravel 11 en later","description":"Een compleet overzicht van het in Laravel 11 geïntroduceerde Slim Application Skeleton en de interne implementatie van Application::configure() tot en met de ApplicationBuilder.","href":"/nl/advanced/app-structure"},{"title":"Migratiegids van oude naar nieuwe structuur","sidebarTitle":"Migratiegids","href":"/nl/advanced/app-structure-migration"},{"title":"FAQ over de nieuwe appstructuur van Laravel 11+","sidebarTitle":"FAQ nieuwe appstructuur","href":"/nl/advanced/app-structure-faq"}]},{"group":"Nieuwe functies in Laravel 13","pages":[{"title":"PHP-attributes","href":"/nl/advanced/php-attributes"},{"title":"PHP-attributes voor controllers","sidebarTitle":"Controller-attributes","href":"/nl/advanced/controller-attributes"}]},{"group":"Eloquent in detail","pages":[{"title":"Eloquent-observers en modelevents","href":"/nl/advanced/eloquent-observers"},{"title":"Scopes in Eloquent","href":"/nl/advanced/eloquent-scopes"},{"title":"Custom casts van Eloquent","href":"/nl/advanced/eloquent-casts"},{"title":"Eloquent bootable traits","href":"/nl/advanced/eloquent-bootable-traits"},{"title":"Custom pivot-modellen en chaperone","href":"/nl/advanced/eloquent-custom-pivot"}]},{"group":"Validatie-uitbreidingen","pages":[{"title":"Custom validatieregels","href":"/nl/advanced/custom-validation-rules"}]},{"group":"Authenticatie uitbreiden","pages":[{"title":"Een custom authenticatieguard implementeren","href":"/nl/advanced/custom-auth-guard"},{"title":"Laravel Fortify en de starter kits","href":"/nl/advanced/fortify"}]},{"group":"Beveiliging","pages":[{"title":"Rate limiting aanpassen","href":"/nl/advanced/rate-limiting"}]},{"group":"Queues","pages":[{"title":"Uitvoeringscontrole van queue-jobs","href":"/nl/advanced/queue-job-control"}]},{"group":"Testen","pages":[{"title":"Geavanceerd testen met Pest","href":"/nl/advanced/testing-pest"}]},{"group":"Realtime","pages":[{"title":"Onder de motorkap van de Mercure-broadcastdriver","href":"/nl/advanced/mercure-broadcasting"}]}]},{"tab":"Blog","pages":[{"title":"Blog","href":"/nl/blog/changelog/202609"}]}]},{"language":"zh-Hans","pages":[{"title":"zh-Hans","href":"/zh-CN/advanced/package-cache-drivers"}]},{"language":"zh-Hant","pages":[{"title":"zh-Hant","href":"/zh-TW/advanced/package-cache-drivers"}]}]},"title":"Eigen cachestores en contracten voor packages - Knowledge of Laravel","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["2bfc744e19"],"chunks":["NarrationPlayer-CALW4h7b.js","types-CiTgMxws.js","shallow-Bs2ZB0NO.js"]}