对具有不同服务参数的多个实体使用相同的实体侦听器

2024-04-19

由于 EntityListener 注册为服务,是否可以使用不同的参数多次注册同一个类,并将它们每个与特定的实体相关联?

考虑以下实体:

/**
 * Class EntityA
 * @ORM\Entity
 * @ORM\EntityListeners({"myBundle\EventListener\SharedListener"})
 */
class EntityA implements sharedBehaviourInterface
{
    // stuff here
}

/**
 * Class EntityB
 * @ORM\Entity
 * @ORM\EntityListeners({"myBundle\EventListener\SharedListener"})
 */
class EntityB implements sharedBehaviourInterface
{
    // stuff here
}

我想为之前的两个实体注册以下侦听器,如下所示:

class SharedListener
{
    private $usefulParameter;

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

    /**
     * @PrePersist
     *
     */
    public function prePersist(sharedBehaviourInterface $dbFile, LifecycleEventArgs $event)
    {
        // code here
    }

    // more methods
}

Using :

mybundle.entitya.listener:
    class: myBundle\EventListener\SharedListener
    arguments:
        - '%entitya.parameter%' # The important change goes here ...
    tags:
        - { name: doctrine.orm.entity_listener }
mybundle.entityb.listener:
    class: myBundle\EventListener\SharedListener
    arguments:
        - '%entityb.parameter%' # ... and here
    tags:
        - { name: doctrine.orm.entity_listener }

它不起作用,而且我实际上很惊讶实体中的 EntityListener 声明针对的是 Listener 类而不是服务。是否可以改为针对特定服务?喜欢 :

@ORM\EntityListeners({"mybundle.entityb.listener"})

或者我想做的事情根本不可能实现?


您可以将其他服务注入到服务中@configured_service_id符号。这适用于构造函数参数和 setter 注入。

一般来说:不要试图在不需要的地方寻找抽象。 大多数时候,从长远来看,少量的代码重复会容易得多。

我会简单地为每个目的构建两个独立的监听器。

如果实体不是应使用同一侦听器处理的两个实体之一,请执行一个简单的检查,该检查会跳出处理程序:

<?php
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;

class MyEventListener
{
    public function preUpdate(LifecycleEventArgs $args)
    {
        $entity = $args->getObject();
        $entityManager = $args->getObjectManager();

        if (!$entity instanceof EntityA && !$entity instanceof EntityB) {
            return;
        }

        /* Your listener code */
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对具有不同服务参数的多个实体使用相同的实体侦听器 的相关文章

  • 使用 Graph API 删除 facebook 帖子 - 无法正常工作

    我使用以下命令在我的 Facebook 页面上发布消息 attachment array access token gt access token message gt This is a test Message 4 name gt Th
  • 替代 header("Content-type: text/xml");

    是否存在与以下内容等效的内容 header Content type text xml 我将 Google 地图与 Wordpress 一起使用 但收到 标头已发送 错误 我已经检查了所有文件并删除了所有空白 但错误仍然出现 所以只是想知道
  • Php Define() 命名空间内的常量说明

    正如标题所示 我真的很想澄清这一点 我读过一些关于这个主题的文章和帖子 但有些东西不适合我 我会补充一点 我对 Php 有点陌生 好吧 这就是我想了解的 namespace Information define ROOT URL infor
  • 创建动态子域

    自从我考虑一些网站正在实施的此功能以来已经有一段时间了 它看起来非常成功 类似的网站tumblr com blogger com wordpress com允许用户使用简单的 HTML PHP 表单从网站内注册新的子域名 以我目前对 PHP
  • $_COOKIE[] 设置后似乎没有反映更改

    我不记得过去使用 Cookie 时遇到过很多问题 但我在尝试时遇到了一些意想不到的结果 我在本地主机上运行 因此我的域设置 这将产生以下输出 Cookie Set Cookie equals 457718770 shou
  • 合并两个数字键关联数组并保留原始键

    我有两个这样的数组 array 11 gt 11 22 gt 22 33 gt 33 44 gt 44 array 44 gt 44 55 gt 55 66 gt 66 77 gt 77 我想组合这两个数组 使其不包含重复项并保留其原始键
  • PHP MS Word 文件页数

    实际上我正在尝试计算 ms word 文件的页数 我正在使用这个 php 脚本 但是 没有向我显示确切的结果 并且脚本不是那么快 谁能帮助我获得更好的脚本 word new COM word application if word echo
  • 如何将 imagecropauto() 与 IMG_CROP_TRANSPARENT 一起使用?

    当我尝试裁剪图像的透明区域时 它会保持原始大小 并且透明区域会变成黑色 如果我运行这段代码
  • PHP 数据库显示在具有不同锚标记的相同字段中

    我四处寻找 看看这是否可行 但却空手而归 首先 这是我的代码 div style display none div ul li li li li li li ul
  • PHP:将数组添加在一起

    有人可以帮我解释一下吗 我有两段代码 其中一个按我的预期工作 但另一个则不然 这有效 a array a gt 1 b gt 2 b array c gt 3 c a b print r c Output Array a gt 1 b gt
  • Zend Framework 2 在视图中显示视图

    我有两个模块管理和登录 我想在管理视图 index html 中显示登录视图 login phtml 我在管理模块indexAction控制器中有以下内容 public function indexAction login new Logi
  • 根据客户端发送 HTML 或 JSON 响应

    我有一个带有 Eloquent 实体及其各自的 Laravel 应用程序RESTful 资源控制器 http laravel com docs 5 0 controllers restful resource controllers 如下所
  • mysqli_stmt_bind_result 的奇怪问题

    好吧 这让我很烦恼 我似乎在 PHP 文档中找不到任何内容 在 Google resultosphere 中也找不到任何内容 所以也许有人可以在这里提供帮助 我正在使用准备好的语句 绑定结果 然后使用这些绑定结果来填充下拉列表 例子
  • php循环中的ajax在按钮单击时执行操作

    所以我有一个 php 循环 我使用 jquery 滑动切换来隐藏 显示带有 sql 结果的表 目前该表仅使用 php 加载 但由于发生了很多事情 导致了一些加载问题 我需要使用滑动切换 btn 来触发 ajax 因此它仅在按下按钮时请求当前
  • 有没有办法获取 PHP 中可用区域设置的列表?

    在Java中 你可以调用Locale getAvailableLocales 获取可用区域设置的列表 我期待 PHP 的同等功能Locale http php net manual en class locale php类 但找不到 有没有
  • PHP 对象创建和内存使用

    一个基本的虚拟类 class foo var bar 0 function foo function boo echo memory get usage echo n foo new foo echo memory get usage ec
  • 下载表格 - 选择文件合并到 Zip 中

    我希望创建一个表单 用户可以从手册列表中进行选择 总共10个 他们可能只想下载 3 份小册子 或 6 份 或 1 份 或 9 份小册子 但想法是他们选择所需的小册子 然后用脚本组合一个包含所需小册子的 zip 文件 任何人都可以提出任何建议
  • PHP filesize() 适用于除一个文件之外的所有文件,给出 stat failed 错误

    我正在编写一个 PHP 页面 该页面通过抓取现有 HTML 页面来生成播客提要 一切正常 但我的 mp3 文件之一出现 filesize stat failed 错误 据我所知 该文件没有损坏 并且播放得很好 我还将文件重新上传到服务器 它
  • 未加载 Firebird 扩展

    我正在尝试在 PHP 中使用 Firebird 扩展 我有扩展文件 php pdo firebird dll php interbase dll in my ext文件夹 我将它们添加到我的php ini像这样文件 PHP PDO FIRE
  • 如何确定函数是否不返回任何内容?

    有没有办法在 PHP 中使用反射或其他方法来做到这一点 function a return null function b a a null b b null 如果您没有显式返回某些内容 则函数将返回null默认情况下 这就是 PHP 中函

随机推荐

  • 类型错误:无法腌制 dict_items 对象

    Why does pickle dumps items 失败与TypeError can t pickle dict items objects在 Python 3 5 2 中但不在 Python 2 7 12 中 用 酸洗 字典 pick
  • ITMS-90909:Xamarin Forms 应用程序中不推荐使用 iOS 的 API

    任何人都可以建议如何处理我将 Xamarin Forms 应用程序提交到 iOS 商店时收到的这条消息吗 对可能的重复进行评论 这个问题之前曾被问过 但没有得到解答 我认为不存在已答复的重复项 这是一个已知问题 最近由 Xamarin 团队
  • 建立数据库连接 Amazon EC2 时出错 - 移动我的 WordPress 博客后

    将我的 WordPress 博客移至 Amazon EC2 后 我收到错误 建立数据库连接时出错 我已经检查了 wp config php 文件并且设置正常 本地主机 密码和用户名 我已经阅读了这里的许多问题和答案 但没有任何帮助我 我有
  • 在 Web API 中使用 ExceptionFilterAttribute

    我正在尝试在创建的 Web API 中实现错误处理 需要以 JSON 格式返回异常详细信息 我创建了 BALExceptionFilterAttribute 像 public class BALExceptionFilterAttribut
  • 我们可以在 PHP 的任何函数中传递数组作为参数吗?

    我有一个向用户发送邮件的函数 我想将其参数之一作为 id 数组传递 这可以吗 如果是的话 该怎么办 假设我们有一个函数 function sendemail id userid 在示例中 id应该是一个数组 您可以传递一个数组作为参数 它是
  • 类型参数 T 使用 Eclipse 将类型 T 隐藏在 T[] toArray(T[] a) 中

    将 eclipse 4 2 与 Java 7 一起使用并尝试实现 List 接口的以下方法时 我收到了警告 public
  • 访问 sails.js 的基础 http 服务器

    您好 有没有办法访问 sails 的基本 http 服务器上下文 我想在我的应用程序中使用binaryJS 并且在 gettig 入门指南中 他们正在谈论自己创建服务器 如果您有一个现有的 Express 应用程序 其中包含以下行 var
  • 如何加快这段 Java 代码的速度?

    我正在尝试测试 Java 执行一项简单任务的速度有多快 将一个大文件读入内存 然后对数据执行一些无意义的计算 所有类型的优化都很重要 无论是以不同的方式重写代码还是使用不同的 JVM 欺骗 JIT 输入文件是一个由逗号分隔的 5 亿长的 3
  • 为什么 $count=true 的 OData 查询返回一个对象?

    我试图弄清楚如何正确支持返回 OData API 中 已过滤的 数据集中的项目数 我的理解是添加 count true查询字符串的参数应该允许这样做 现在 基于官方文档中教程的示例 https www odata org getting s
  • SQL 2008 存储过程中的可选 where 子句/参数?

    我正在编写一些更新表的代码 根据用户想要执行的操作 它会更新一大组记录或较小的记录 描述因素是组ID 用户可以选择是更新表中的所有记录 还是仅更新具有该 groupID 的记录 我想对两个实例使用相同的存储过程 其中可能有一些逻辑来区分场景
  • JQuery html() 与 innerHTML

    我可以完全依赖 jQuery 吗html 方法的行为与innerHTML 有什么区别吗innerHTML和 jQuery 的html 方法 如果这些方法都做同样的事情 我可以使用 jQuery 的吗 html 方法代替innerHTML 我
  • 获取 Firefox 中扩展的附加 ID

    我想在浏览器选项卡中打开扩展作为普通的 html 页面 以便我可以使用 selenium WebDriver 自动化它 在 Firefox 中 可以使用这样的链接来完成 moz extension f1b30486 cd88 4319 bb
  • 在生产模式下写入全局变量有什么问题?

    我看了一下连接mongodb的示例代码 看到了一句看不懂的内容 为什么在开发的情况下使用全局变量是安全的 又为何没有投入生产 您不需要理解代码 请只看评论部分 import MongoClient from mongodb let clie
  • 为什么主要编译器对 stdint.h 使用 typedef 而对 stdbool.h 使用 #define?

    我刚刚注意到 gcc 和 clang 似乎都对 stdint h 使用 typedef 但对 stdbool h 使用 define 例子 clang 的 stdint h https clang llvm org doxygen stdi
  • 应用程序中有多少个并发线程才算是很多?

    5 100 1000 我想 这取决于 但是取决于什么呢 作为服务器守护进程 服务运行的应用程序有什么常见之处 什么是硬限制 鉴于机器可以处理总体工作负载 我如何确定开销在多少个线程时开始对性能产生影响 操作系统之间的重要区别是什么 还应该考
  • 从 Windows 任务列表返回命令行

    我正在寻找一个命令来获取在 Windows 任务管理器中写入的命令行 我正在使用tasklist fo CSV v但它不提供我查看任务管理器时得到的命令行 我附上一张图片来说明我的意思 它是最右边的一列 我在系统调用中需要这些信息r 只是为
  • 如何在eclipse中配置ADT插件

    开发者网站上有以下说明 配置 ADT 插件 一旦 Eclipse 重新启动 您必须指定 Android SDK 目录的位置 在出现的 欢迎使用Android开发 窗口中 选择 使用现有的SDK 浏览并选择您最近下载并解压的 Android
  • 限制多处理python中的进程数量

    我的要求是生成hundreds of HTTP POST requests per second 我正在使用它urllib2 def send req urllib2 Request url req add data data respon
  • 尝试添加已经有父级错误的 SKNode

    我在尝试运行我的游戏时收到错误 尝试添加已有父节点的 SKNode 如果我将 SKSpriteNode 在本地添加到函数中 它就可以正常运行 但是当我尝试在全球范围内声明它时 我收到了该错误 任何解决此错误的帮助都会很棒 我认为这与self
  • 对具有不同服务参数的多个实体使用相同的实体侦听器

    由于 EntityListener 注册为服务 是否可以使用不同的参数多次注册同一个类 并将它们每个与特定的实体相关联 考虑以下实体 Class EntityA ORM Entity ORM EntityListeners myBundle