Symfony 3 / APCu + PHP7

时间:2016-06-29 07:37:22

标签: php symfony apc php-7 apcu

我再次遇到APCu和PHP7的问题。 这是我的conf。

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的\分量\调试\异常\ UndefinedFunctionException:   "试图调用函数" apc_fetch"从命名空间   "学说\共同\缓存""在   ROUTE_TO_PROJECT /供应商/教义/缓存/ lib中/教义/通用/缓存/ ApcCache.php   第41行{"例外":" [对象]   (Symfony的\元器件\调试\异常\ UndefinedFunctionException(代码:   0):尝试调用函数\" apc_fetch \"从命名空间   \"学说\共同\缓存\&#34 ;.在   ROUTE_TO_PROJECT /供应商/教义/高速缓存/ LIB /学说/普通/缓存/ 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 个答案:

答案 0 :(得分:5)

在以前版本的APCu中,APC模块和函数是作为库的一部分提供的。

APCu的最新版本(PHP 7)中,向后兼容的APCseparate extension

答案 1 :(得分:4)

这是我的解决方案:

services.yml

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

confing_prod.yml

serializer:
    cache: serializer.mapping.cache.apcu

如果此解决方案没问题,请尝试,但看起来有效。所以如果你知道更好的解决方案,我想用它。

答案 2 :(得分:3)

您可以使用doctrine缓存包装器

来使用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']