无法覆盖 Symfony ConstraintViolationList 的 JMS Serializer 默认处理程序

2024-03-28

我无法覆盖 jms 序列化程序包中的默认处理程序。

我想改变方式Symfony\Component\Validator\ConstraintViolationList已序列化,因此我编写了自己的自定义处理程序。并按照文档(以及各种 stackoverflow 答案)中的描述正确标记它。

但是,我的处理程序不断被 JMS Serializer 捆绑包附带的 ConstraintViolationList 的默认处理程序覆盖。

我已正确标记我的处理程序服务。事实上,当我注释掉时,我的处理程序服务被检测到并正确使用ms_serializer.constraint_violation_handler服务定义来自vendor/jms/serializer-bundle/JMS/SerializerBundle/Resources/config/services.xml

如何阻止默认处理程序覆盖我的自定义处理程序?

我什至尝试过覆盖jms_serializer.constraint_violation_handler.class来自我自己的包的参数但仍然没有运气。

这是我的处理程序类:

<?php
namespace Coanda\Bridge\JMSSerializer\Handler;

use JMS\Serializer\Context;
use JMS\Serializer\GraphNavigator;
use JMS\Serializer\Handler\SubscribingHandlerInterface;
use JMS\Serializer\JsonSerializationVisitor;
use Symfony\Component\Validator\ConstraintViolation;
use Symfony\Component\Validator\ConstraintViolationList;

class ConstraintViolationHandler implements SubscribingHandlerInterface
{
    public static function getSubscribingMethods()
    {
        $methods = [];
        $methods[] = [
            'direction' => GraphNavigator::DIRECTION_SERIALIZATION,
            'type' => ConstraintViolationList::class,
            'format' => 'json',
            'method' => 'serializeListToJson'
        ];
        return $methods;
    }

    public function serializeListToJson(
        JsonSerializationVisitor $visitor,
        ConstraintViolationList $list,
        array $type,
        Context $context
    ) {
        $violations = [];
        foreach ($list as $item) {
            $violations[$item->getPropertyPath()][] = $item->getMessage();
        }
        if (null === $visitor->getRoot()) {
            $visitor->setRoot($violations);
        }
        return $violations;
    }

}

我已将其注册在我的services.xml

    <service id="coanda.serializer.constraint_violation_handler"
        class="Coanda\Bridge\JMSSerializer\Handler\ConstraintViolationHandler">
        <tag name="jms_serializer.subscribing_handler"
            type="Symfony\Component\Validator\ConstraintViolationList"
            direction="serialization" format="json" method="serializeListToJson" />
    </service>

发生这种情况是因为 JMSSerializerBundle 是在 AppKernel 中的捆绑包之后注册的,这意味着我定义的任何服务都将被 JMS Serializer 的版本覆盖。

Solution:将您的包放在 AppKernel.php 的最底部,如下所示:

public function registerBundles()
{
    $bundles = [
        // .......
        new JMS\SerializerBundle\JMSSerializerBundle(),
        new My\Bundle\MyAwesomeBundle()
    ];

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

无法覆盖 Symfony ConstraintViolationList 的 JMS Serializer 默认处理程序 的相关文章

  • PHP strtotime返回Mysql UNIX_TIMESTAMP的不同值

    我在 stackoverflow 上搜索过帖子 发现了一些类似的帖子 但我认为这是一篇不同的帖子 我的 PHP 和 Mysql 服务器的时区全部设置为 UTC 在表中我使用时间戳字段 值为 2010 11 08 02 54 15 我使用这样
  • 将 javascript 变量发送到服务器端 ASP .NET

    我需要在回发时将 JavaScript 数据传递到服务器端 Exvar jsVariableToPass new Object jsVariableToPass key1 value1 jsVariableToPass key2 value
  • 通过“SELECT”命令选择每组的前两条记录的最佳方法是什么?

    例如我有下表 id group data 1 1 aaa 2 1 aaa 3 2 aaa 4 2 aaa 5 2 aaa 6 3 aaa 7 3 aaa 8 3 aaa 通过 SELECT 命令选择每组的前两条记录的最佳方法是什么 如果没有
  • 正则表达式检查确切的字符串是否存在,包括#

    新问题正如 Asaph 在上一个问题中所建议的 正则表达式检查确切的字符串是否存在 https stackoverflow com questions 2824291 regex to check if exact string exist
  • laravel Blade 模板不渲染

    进入 Laravel 后 我尝试使用 Blade 模板 但它没有渲染 我的所有示例都来自 Laravel 文档 UPDATE 所以这是我的master blade php 文件位于资源 gt 视图 gt master blade php y
  • 作为数据流写入 div

    考虑写入 div 的 AJAX 调用 recent req post result php d data function returnData content html returnData PHP 脚本位于result php执行一些需
  • 如何捕获 Symfony2/Silex 中的错误和异常?

    我想在我的 Silex 应用程序中捕获错误和异常 将它们包装在始终返回给客户端的自定义 JSON 响应中 我发现了三种基本方法 app gt error Symfony Component Debug ErrorHandler regist
  • 在 PHP $_SESSION 中存储数据不安全吗?

    根据我的理解 PHP 进程的行为并不像应用程序服务器进程 因此 执行脚本后 PHP 进程不会保留任何用户特定数据 相反 它将它们存储在用户的 cookie 中 所以无论我们存储在什么地方 SESSSION进入cookie 这是真的 如果是
  • 使用 htmlpurifier 将具有 of 类的元素列入白名单

    我只想仅当 span 元素在 htmlpurifier 中具有特定类时才允许它 有谁知道该怎么做 现在我有 config gt set HTML Allowed a href p ol li ul img src blockquote em
  • Codeigniter - 检查用户是否已登录并存在(它是真实用户)

    我正在尝试在用户登录我的网站时为他们设置会话数据 因此 如果用户存在于数据库中 我将设置一个会话数据 例如 this gt session gt set userdata user exists 1 现在 每次我想检查用户是否存在并已登录时
  • 递归替换多维数组中特定键每次出现的值

    我有一个数组 其数组深度可能会有所不同 例如 array one gt array array something gt value array something2 gt value2 another gt anothervalue tw
  • 自动解析 PHP,将 PHP 代码与 HTML 分离

    我正在开发一个大型 PHP 代码库 我想将 PHP 代码与 HTML 和 JavaScript 分开 我需要对 PHP 代码进行多次自动搜索和替换 对 HTML 进行不同的搜索和替换 对 JS 进行不同的自动搜索和替换 有没有一个好的解析器
  • PHP preg_match_all 100 MB 文件

    我读到 preg match all 不是为解析大文件而设计的 但我需要这样做 我增加了 pcre backtrack limit 1000000000 pcre recursion limit 1000000000 我的 PHP memo
  • 使用 jquery 迭代 json 数组

    已经有一些帖子和我遇到了类似的问题 如何使用 PHP 中的 jQuery AJAX 调用迭代 JSON 数组 https stackoverflow com questions 6472338 how do i iterate over a
  • 根据相同的 XML 模式 (XSD) 加速一批 XML 文件的 XML 模式验证

    我想加快根据同一个 XML 模式 XSD 验证一批 XML 文件的过程 唯一的限制是我处于 PHP 环境中 我当前的问题是 我想要验证的模式包括 2755 行的相当复杂的 xhtml 模式 http www w3 org 2002 08 x
  • Doctrine 生成实体命名空间问题?

    好吧 我对原则有最后一个问题 生成 实体命令 我运行以下命令 并得到预期的文件 src MyNamespace Bundle MyNamespaceBundle Resources config doctrine metadata orm
  • 关闭旧的 php websocket

    我在用PHP Websockets https github com ghedipunk PHP Websockets创建一个简单的聊天服务器 当我第一次运行在我的服务器上创建 websocket 的 php 脚本时 一切正常 如果脚本由于
  • Thrift 与 Protocol Buffers 最大的区别是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最大的优点和缺点是什么阿帕奇节俭 http incubator apache org thrift vs Google 的协议缓冲区 http
  • PHPExcel输出乱码

    我正在尝试 PHPExcel 附带的简单示例 01simple xls 我得到乱码输出 它 LibreOffice 想要导入文件 它认为字符集是西欧 DOS OS2 861 icelandic 输出是这样的
  • DOMDocument PHP 内存泄漏

    在 MAC 上的 MAMP 下运行 PHP 5 3 6 内存使用量每调用 x 次 3 到 8 次 就会增加 直到脚本因内存耗尽而终止 我该如何解决 libxml use internal errors true while true dom

随机推荐