我创建了一个派生自AbstractProcessingHandler
的处理程序类。我已经看到我可以将它放在src/MyNamespace/MyBundle/Monolog/
中,但它让我有点担心,因为这个处理程序在我记录数据的其他几个包中使用。所以其他捆绑包需要MyBundle才能正常工作,只是因为这个处理程序。
我试图将我的处理程序类放在lib/
中,但它似乎不起作用(也许我必须对Autoload做一些特别的事情?)。
或者我应该专门为此处理程序创建一个新的包吗?
编辑:我无法将自定义处理程序类放在vendor/monolog/monolog/src/Monolog/Handler
中,因为我无法将其添加到我的git存储库中:存在冲突,因为此文件夹由另一个git存储库管理(由Composer创建)
答案 0 :(得分:2)
在Monolog的结尾,对于放置它或者如何调用它没有任何限制。关键是它只实现了monolog的HandlerInterface或从现有的一个处理程序扩展。
现在它取决于你的处理程序是什么,如果它是其他人可以使用的通用东西,你可以将它作为拉动请求提交给monolog。
如果没有,你可以为它创建一个自己的作曲家包,或者把它放在src/Acme/Monolog/FooHandler
或类似的东西中,所以它会留在你的应用程序中,但显然不在捆绑中。缺点是您需要将其配置为其中一个捆绑包中的服务,因此您仍然对捆绑包具有某种依赖性。
也许将它作为自己的捆绑包就可以了。但是对于一个班级来说,它是相当多的样板
如果您的所有捆绑包都是特定于应用程序的,并且不太可能从中提取出来,那么通过IMO可以实现跨捆绑依赖性。
依赖性无论如何都不是很强,因为一个bundle可以包含处理程序并对其进行配置。其他包仍然可以记录到monolog,即使处理程序不存在,它们也可以记录。它只是不会去那个特定的处理程序。什么都不应该破坏。
如您所见,这只是一个权衡取舍,如果不了解您的项目,很难说哪个解决方案最合适。
答案 1 :(得分:0)
如果您希望在lib/
中安装处理程序类,则需要将lib/
文件夹添加到composer.json
自动加载部分。例如:
"autoload": {
"psr-0": { "": ["src/", "lib/"] }
}
查看Composer文档:
答案 2 :(得分:0)
我认为这里常见的方法是在你的Bundle中使用一个明确依赖的“Bridge”目录。如果您有其他依赖于此的捆绑包,我们所做的就是创建一个ServiceBundle,它基本上适用于应用程序中所有捆绑包的所有共享服务。如果您有分发此捆绑包的计划,这可能不适合您,但可能会这样做。