Попытка вызвать функцию "apcu_fetch" из пространства имен "Doctrine \ Common \ Cache" - PullRequest
0 голосов
/ 30 апреля 2018

Я разрабатываю приложение с Symfony 3 и angular 5 . у меня система windows 10 и я использую php7.2

Все выполняется с помощью dev_mode, но когда я включаю производственный режим, у меня появляется эта ошибка:

Фатальная ошибка: Uncaught Symfony \ Component \ Debug \ Exception \ UndefinedFunctionException: Попытка вызвать функцию "apcu_fetch" из пространства имен "Доктрина \ Common \ Cache".

Как я могу установить apcu?

1 Ответ

0 голосов
/ 30 апреля 2018

Для PHP 7.x может показаться, что Symfony удалил конфигурацию кэша фреймворка (валидации и сериализатора) по умолчанию config_prod.yml и сохранил кэш ORM, но используя apc вместо apcu как они делали ранее. В проекте, работающем на PHP 7.1.12, я обнаружил ту же проблему, что и до этого изменения.

Мне удалось запустить APCU, установив его и изменив конфигурацию Symfony prod, но я был бы склонен поступить так же, как Symfony на этом. Если вы думаете о том, чтобы все еще использовать APCU и сериализацию и кэширование валидатора:

Установите его на сервер, если он не установлен (это будет зависеть от сервера к серверу, но есть другие статьи, объясняющие это):

pecl install apcu && echo "extension=apcu.so" > /usr/local/etc/php/conf.d/apcu.ini

Затем в вашем services.yml добавьте следующее для настройки кэша валидатора:

services:
    doctrine.cache.apcu:
        class: Doctrine\Common\Cache\ApcuCache

    validator.mapping.cache.doctrine.apcu:
        class: Symfony\Component\Validator\Mapping\Cache\DoctrineCache
        arguments: ['@doctrine.cache.apcu']

Тогда используйте это в своем config_prod.yml:

framework:
    validation:
        cache: validator.mapping.cache.doctrine.apcu
    serializer:
        cache: doctrine.cache.apcu

doctrine:
    orm:
        metadata_cache_driver: apcu
        query_cache_driver: apcu
        result_cache_driver: apcu
...