我有一个大型项目,从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;
}
}