Ошибка Symfony4 нехватки памяти при авто-инъекции EntityManager

У меня есть большой проект, перенесенный с symfony3 на symfony4 (версия 4.0.8) с несколькими службами (подписчики событий и прослушиватели событий), которые работают должным образом, за исключением одного (LogActivityListener). Если я отключу LogActivityListener, закомментировав его раздел в services.yaml, все остальное будет работать отлично. Единственное, что отличает этот сервис от других, это то, что он автоматически вводит EntityManager. Я предполагаю, что в моих файлах конфигурации есть что-то, что создает проблему, но, как ни странно, мой проект отлично работает с моей базой данных, за исключением этой единственной службы.

Вот ошибка, которую я вижу на консоли, когда LogActivityListener включен:

bin/console cache:clear --no-warmup

PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 8192 bytes) in /var/www/sites.clients/brcnd/var/cache/dev/ContainerXAH2ooY/getDoctrine_Orm_DefaultEntityManagerService.php on line 24 PHP Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 32768 bytes) in /var/www/sites.clients/brcnd/vendor/symfony/debug/Exception/OutOfMemoryException.php on line 1

Мой код, указанный ниже, очевидно, мало что делает (реальный сервис действительно работает), но он создает указанную выше ошибку.

// doctrine.yaml

parameters:
    env(DATABASE_URL): ''

doctrine:
    dbal:
        default_connection: default
        driver: 'pdo_mysql'
        server_version: 'mariadb-10.1.32'
        charset: utf8
        url: '%env(resolve:DATABASE_URL)%'
    orm:
        default_entity_manager: ~
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

// services.yaml

services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false

    App\:
        resource: '../src/*'

    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    App\Doctrine\LogActivityListener:
        tags:
            - { name: doctrine.event_subscriber }

И мой сервис:

// /src/Doctrine/LogActivityListener  
<?php
namespace App\Doctrine;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;

class LogActivityListener implements EventSubscriber
{
    private $em;

    public function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    public function getSubscribedEvents()
    {
        return ['postPersist'];
    }

    /**
     * Listener attached to newly created records
     */
    public function postPersist(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        return true;
    }
}

Вы не можете внедрить EntityManager в прослушиватель доктрины, EntityManager доступен через LifecycleEventArgs (например, $em = $args->getEntityManager();)

ccKep 23.04.2018 05:03

Спасибо, именно то, что мне нужно!

ehymel 23.04.2018 07:50
Стоит ли изучать 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
2
641
0

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