EntityManager自动注入时Symfony4内存不足错误

时间:2018-04-23 01:00:39

标签: php symfony symfony4

我有一个大型项目,从symfony3移植到symfony4(版本4.0.8),有几个服务(事件订阅者和事件监听器)按预期运行,除了一个(LogActivityListener)。如果我通过在services.yaml中注释掉它的部分来禁用LogActivityListener,那么其他一切工作都很完美。与其他服务相比,此服务唯一不同的是它自动注入EntityManager。我猜我的配置文件中有一些东西正在创建问题,但奇怪的是我的项目与我的数据库完美配合,除了这一项服务。

以下是我在启用LogActivityListener时在控制台上看到的错误:

  

bin / console cache:clear --no-warmup

     

PHP致命错误:第24行的/var/www/sites.clients/brcnd/var/cache/dev/ContainerXAH2ooY/getDoctrine_Orm_DefaultEntityManagerService.php中允许的内存大小为1073741824字节(尝试分配8192字节)   PHP致命错误:在第1行的/var/www/sites.clients/brcnd/vendor/symfony/debug/Exception/OutOfMemoryException.php中,允许的内存大小为1073741824字节(尝试分配32768字节)

下面列出的代码显然不会做太多(实际服务确实有效),但确实会产生上述错误。

// 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;
    }
}

0 个答案:

没有答案