Symfony 3 / APCu + PHP7

У меня снова проблема с APCu и PHP7.
Вот мой конф.

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

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

Сайт работает нормально, но когда я отправляю форму, я всегда получаю эту ошибку:

[2016-06-29 09:17:12] request.CRITICAL: необработанное исключение PHP
Symfony \ Component \ Debug \ Exception \ UndefinedFunctionException:
«Попытка вызова функции» apc_fetch «из пространства имен
«Доктрина \ Общее \ Кэш». «В
ROUTE_TO_PROJECT / продавец / Доктрина / кэш / Библиотека / Doctrine / Общие / Cache / ApcCache.php
строка 41 {«исключение»: «[объект] (Symfony \ Component \ Debug \ Exception \ UndefinedFunctionException (код:
0): Попытка вызвать функцию \ «apc_fetch \» из пространства имен
\ «Доктрина \ Common \ Cache \». в
ROUTE_TO_PROJECT / продавец / Доктрина / кэш / Библиотека / Doctrine / Общие / Cache / ApcCache.php: 41) «}
[]

вот мой композитор:

"require": {
"php": ">=5.5.9",
"symfony/symfony": "3.0.*",
"doctrine/orm": "^2.5",
"doctrine/doctrine-bundle": "^1.6",
"doctrine/doctrine-cache-bundle": "^1.2",
"symfony/swiftmailer-bundle": "^2.3",
"symfony/monolog-bundle": "^2.8",
"sensio/distribution-bundle": "^5.0",
"sensio/framework-extra-bundle": "^3.0.2",
"incenteev/composer-parameter-handler": "^2.0",
"knplabs/knp-paginator-bundle": "^2.5",
"liip/imagine-bundle": "^1.5",
"jms/serializer-bundle": "^1.1",
"symfony/assetic-bundle": "^2.8",
"gopay/payments-sdk-php": "^1.1",
"knplabs/knp-snappy-bundle": "~1.4",
"friendsofsymfony/user-bundle": "~2.0@dev"

Почему Symfony вызывает apc_fetch вместо apcu_fatch?

3

Решение

В предыдущих версиях APCu, APC модуль и функции были предоставлены как часть библиотеки.

В самых последних (PHP 7) версиях APCu, обратно совместимый APC это отдельное расширение.

5

Другие решения

Это мое решение:

services.yml

serializer.mapping.cache.apcu:
class: Doctrine\Common\Cache\ApcuCache

confing_prod.yml

serializer:
cache: serializer.mapping.cache.apcu

ИДК, если это решение в порядке, но похоже, что оно работает. Так что, если вы знаете лучшее решение, я хотел бы использовать его.

4

Вы можете заставить apcu работать с проверкой Symfony, используя оболочку кеша доктрины.

config.yml

validation:
cache: validator.mapping.cache

services.yml

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

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