我想覆盖JMS/序列化器包中的一个类。不幸的是,这个类被标记为“final”,我不能覆盖它。请问,解决这个问题的最好方法是什么?我在symfony5.4上
下面是我想要重写的类:
<?php
declare(strict_types=1);
namespace JMS\Serializer\Handler;
use JMS\Serializer\GraphNavigatorInterface;
use JMS\Serializer\Visitor\SerializationVisitorInterface;
use JMS\Serializer\XmlSerializationVisitor;
use Symfony\Component\Form\Form;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Translation\TranslatorInterface;
use Symfony\Contracts\Translation\TranslatorInterface as TranslatorContract;
use function get_class;
final class FormErrorHandler implements SubscribingHandlerInterface
{
/**
* @var TranslatorInterface|null
*/
private $translator;
/**
* @var string
*/
private $translationDomain;
2条答案
按热度按时间ssgvzors1#
简短的回答是,只要包作者没有提供用自定义实现替换最终类的功能,就不能覆盖最终类。
通过查看软件包的源代码,您可以做到这一点。
SerializeBuilder
构造函数类似于:这显然意味着您可以添加自定义处理程序。
并且由于文档的缘故,您可以轻松地实现自己的处理程序。
gcuhipw92#
我最终找到了一个解决方案。我重写了FOS/SerializerbUndle中的FormErrorHandler类,然后重写了JMS中的formErrorHandlere类,我在FOS/FormErrorHandler的重载中调用了这个类。它工作得很好