覆盖Symfony组件类

时间:2016-07-13 11:34:59

标签: php symfony

我需要对这个symfony类进行更改:

Symfony\Component\Translation\MessageCatalogue

有谁知道我如何强迫Symfony使用我自己的这个类的变种?我不想篡改实际的核心文件,以防万一。

1 个答案:

答案 0 :(得分:3)

MessageCatalogue类不是在依赖注入容器中注册的服务,因此不能使用标准方法(类名参数/编译器传递)覆盖它。它直接用在Symfony代码中,例如new MessageCatalogue()

如果你真的需要覆盖它,你可以通过在类加载器中显式设置类位置来实现。类映射优先于PSR-0 / PSR-4前缀。

$loader = require __DIR__ . '/../vendor/autoload.php';

$loader->addClassMap([
    'Symfony\Component\Translation\MessageCatalogue' => 'path/to/your/override.php',
]);

缺点是:

  • 它有点hackish - 我只做这个作为最后的手段
  • 您无法扩展原始类,您必须重新实现它或复制粘贴代码
  • 如果您更新Symfony
  • ,则必须记住更新它