Как использовать ApcuCache с Symfony, Doctrine ORM и DoctrineCacheBundle

до того, как я столкнулся с этой проблемой, проект работал на PHP5.6 на SF2.6.

теперь я использую PHP7.1.20 с SF2.8. Я установил apcu вместе с apcu_bc внутри своего контейнера докеров и включил модуль apcu php.

теперь ошибка:

UndefinedFunctionException in ApcCache.php line 35:
Attempted to call function "apc_exists" from the global namespace.

когда я меняю фактические вызовы функций внутри загруженного класса ApcCache с apc_ на apcu_, все работает нормально.

внутри Doctrine \ Common \ Cache находятся оба класса: ApcCache- и ApcuCache-Class. Я не знаю, как я могу сказать доктрине ORM / CacheBundle использовать ApcuCache-Class вместо Apc.

Конфигурация доктрины:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                driver:   "%database_driver%"
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
                persistent: true
                wrapper_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Connection'
                driver_class: 'Facile\DoctrineMySQLComeBack\Doctrine\DBAL\Driver\PDOMySql\Driver'
                server_version: '5.7'
                options:
                    x_reconnect_attempts: 3
            jato:
                driver:   "%database_jato_driver%"
                host:     "%database_jato_host%"
                port:     "%database_jato_port%"
                dbname:   "%database_jato_name%"
                user:     "%database_jato_user%"
                password: "%database_jato_password%"
                charset:  UTF8
                persistent: true
                server_version: '5.7'

            drupal:
                driver:   "%database_drupal_driver%"
                host:     "%database_drupal_host%"
                port:     "%database_drupal_port%"
                dbname:   "%database_drupal_name%"
                user:     "%database_drupal_user%"
                password: "%database_drupal_password%"
                charset:  UTF8
                persistent: true
                server_version: '5.7'

        types:
            json: Sonata\Doctrine\Types\JsonType

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    SonataMediaBundle: ~
                    ApplicationSonataMediaBundle: ~
                    XFrontendBundle: ~
                query_cache_driver:
                    type: service
                    id: doctrine_cache.providers.chain_cache
                metadata_cache_driver:
                    type: service
                    id: doctrine_cache.providers.chain_cache
                result_cache_driver:
                    type: service
                    id: doctrine_cache.providers.chain_cache

            jato:
                connection: jato
                mappings:
                    XBackendBundle: ~
                query_cache_driver: array
                metadata_cache_driver: array
                result_cache_driver: array
            drupal:
                connection: drupal

Конфигурация DoctrineCacheBundle:

doctrine_cache:
    providers:
        chain_cache:
            chain:
                providers: [array_cache, apc_cache]
        apc_cache:
            type: apc
        array_cache:
            type: array

внутри кешированного сервисного контейнера (app / cache / prod / appProdProjectContainer.php) я могу найти следующую информацию:

'doctrine_cache.providers.apc_cache' => 'getDoctrineCache_Providers_ApcCacheService',

с последующим

/*
     * Gets the public 'doctrine_cache.providers.apc_cache' shared service.
     *
     * @return \Doctrine\Common\Cache\ApcCache
     */
    protected function getDoctrineCache_Providers_ApcCacheService()
    {
        return $this->services['doctrine_cache.providers.apc_cache'] = new \Doctrine\Common\Cache\ApcCache();
    }

а также

 'validator.mapping.cache.apc.class' => 'Symfony\\Component\\Validator\\Mapping\\Cache\\ApcCache',

а также

'doctrine_cache.apc.class' => 'Doctrine\\Common\\Cache\\ApcCache',
'doctrine.orm.cache.apc.class' => 'Doctrine\\Common\\Cache\\ApcCache',

что мне нужно настроить или обновить и т. д., чтобы использовать только ApcuCache-Class вместо Apc.

дополнительная информация о композиторе:

doctrine/cache                           v1.8.0
doctrine/annotations                     v1.6.0             
doctrine/cache                           v1.8.0             
doctrine/collections                     v1.5.0             
doctrine/common                          v2.9.0             
doctrine/dbal                            v2.4.5             
doctrine/doctrine-bundle                 1.6.13             
doctrine/doctrine-cache-bundle           dev-master 
doctrine/event-manager                   v1.0.0             
doctrine/inflector                       v1.3.0             
doctrine/instantiator                    1.1.0              
doctrine/lexer                           v1.0.1             
doctrine/orm                             v2.4.8             
doctrine/persistence                     v1.0.1             
doctrine/reflection                      v1.0.0  

symfony/assetic-bundle                   v2.8.2             
symfony/monolog-bundle                   v2.12.1           
symfony/polyfill-apcu                    v1.9.0             
symfony/polyfill-ctype                   v1.9.0             
symfony/polyfill-intl-icu                v1.9.0             
symfony/polyfill-mbstring                v1.9.0             
symfony/polyfill-php54                   v1.9.0             
symfony/polyfill-php55                   v1.9.0             
symfony/polyfill-php56                   v1.9.0             
symfony/polyfill-php70                   v1.9.0             
symfony/polyfill-util                    v1.9.0             
symfony/security-acl                     v3.0.1             
symfony/swiftmailer-bundle               v2.6.7             
symfony/symfony                          v2.8.45

sonata-project/admin-bundle              3.39.0             
sonata-project/block-bundle              3.12.1             
sonata-project/cache                     2.0.1              
sonata-project/core-bundle               3.11.2             
sonata-project/datagrid-bundle           2.3.1              
sonata-project/doctrine-extensions       1.0.2              
sonata-project/doctrine-orm-admin-bundle 3.4.2              
sonata-project/easy-extends-bundle       2.5.0              
sonata-project/exporter                  1.9.1              
sonata-project/formatter-bundle          3.5.0              
sonata-project/intl-bundle               2.5.0              
sonata-project/jquery-bundle             1.10.2             
sonata-project/markitup-bundle           2.1.0              
sonata-project/media-bundle              3.15.0 

информация об отладке контейнера:

Information for Service "doctrine_cache.providers.apc_cache"
============================================================

 ------------------ ------------------------------------
  Option             Value
 ------------------ ------------------------------------
  Service ID         doctrine_cache.providers.apc_cache
  Class              Doctrine\Common\Cache\ApcCache
  Tags               -
  Scope              container
  Public             yes
  Synthetic          no
  Lazy               no
  Synchronized       no
  Abstract           no
  Autowired          no
  Autowiring Types   -
 ------------------ ------------------------------------    

Я предполагаю, что это правильный сервис, который мне нужно настроить для использования ApcuCache-Class поверх фактического ApcCache-Class.

спасибо, ребята, помощь очень ценится.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
968
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

... ... ...

можно просто переопределить фактическую службу ...

@ / src / App / Bundle / Resources / config / services.yml:

doctrine_cache.providers.apc_cache:
        class: Doctrine\Common\Cache\ApcuCache

ну .. первый раз symfony / doctrine / ... учусь на собственном горьком опыте ...

любое дальнейшее объяснение по-прежнему приветствуется.

хорошего вам.

Другие вопросы по теме