简体   繁体   中英

Symfony 3 / APCu + PHP7

I have a problem with APCu and PHP7 again. Here is my 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

Website works ok, but when I send a form, I always get this error:

[2016-06-29 09:17:12] request.CRITICAL: Uncaught PHP Exception Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException: "Attempted to call function "apc_fetch" from namespace "Doctrine\\Common\\Cache"." at ROUTE_TO_PROJECT/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php line 41 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException(code: 0): Attempted to call function \\"apc_fetch\\" from namespace \\"Doctrine\\Common\\Cache\\". at ROUTE_TO_PROJECT/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ApcCache.php:41)"} []

here is my composer:

"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"

Why is Symfony call apc_fetch instead apcu_fatch?

In previous versions of APCu , the APC module and functions were provided as part of the library.

In the most recent (PHP 7) versions of APCu , backward compatible APC is a separate extension .

This is my solution:

services.yml

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

confing_prod.yml

serializer:
    cache: serializer.mapping.cache.apcu

Idk if this solution is ok, but looks like it works. So if you know better solution, I would like to use it.

You can get apcu working with symfony validation using the doctrine cache wrapper

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']

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM