Кешування, засноване на джерелах

Кешування, засноване на джерелах

Після завантаження всіх джерел конфігурації, вам може захотітися обробити значення конфігурації та обʼєднати їх всі в один файл. Цей файл діє як кеш. Його зміст не повинен регенураватися кожний раз при запуску додатку, лише при зміні джерел конфігурації.

Наприклад, компонент Symfony Маршрутизація дозволяє вам завантажувати всі маршрути, а потім скидати зіставник URL або генератор URL, засновуючись на цих маршрутах. В такому випвдку, коли один з ресурсів змінюється (а ви працюєте у середовищі розробки), згенерований файл повинен бути інвалідований та згенерований повторно. Цього можна досягти, використовуючи клас ConfigCache.

Приклад нижче демонструє вам, як збирати джерела, потім генерувати деякий код, заснований на джерелах, що були завантажені, і як записати цей код у кеш. Кеш також отримує колекцію джерел, які були використані для генерування коду. Подивившись на часову відмітку "останні зміни" цих джерел, кеш може вирішити, чи є вони свіжими, або чи потрібно згенерувати зміст повторно:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use Symfony\Component\Config\ConfigCache;
use Symfony\Component\Config\Resource\FileResource;

$cachePath = __DIR__.'/cache/appUserMatcher.php';

// другий аргумент вказує, чи хочете ви використовувати режим налагодження
$userMatcherCache = new ConfigCache($cachePath, true);

if (!$userMatcherCache->isFresh()) {
    // заполните это массивом путей файла 'users.yaml'
    $yamlUserFiles = ...;

    $resources = array();

    foreach ($yamlUserFiles as $yamlUserFile) {
        // див. статтю "Завантадження джерел", щоб
        // дізнатися, звідки $delegatingLoader
        $delegatingLoader->load($yamlUserFile);
        $resources[] = new FileResource($yamlUserFile);
    }

    // код для UserMatcher генерується десь в іншому місці
    $code = ...;

    $userMatcherCache->write($code, $resources);
}

// ви можете захотіти вимагати кешований код:
require $cachePath;

У режимі налагодженна, файл .meta буде створено в тому ж каталозі, що і сам файл кеша. Цей файл .meta містить серіалізовані джерела, часові відмітки яких використовуються для визначення свіжості кеша. В інших режимах, кеш вважається "свіжим" з моменту свого існування, відповідно, файл .meta не створюється.