0

我创建了一个从AbstractProcessingHandler. 我已经看到我可以把它放进去src/MyNamespace/MyBundle/Monolog/,但它让我有点担心,因为这个处理程序用于我记录数据的其他几个包中。所以其他包需要 MyBundle 才能正常工作,只是因为这个处理程序。

我试图将我的处理程序类放入,lib/但它似乎不起作用(也许我必须对 Autoload 做一些特别的事情?)。

或者我应该专门为这个处理程序创建一个新包?

编辑:我不能真正放置我的自定义处理程序类,vendor/monolog/monolog/src/Monolog/Handler因为那样我就无法将它添加到我的 git 存储库:存在冲突,因为此文件夹由另一个 git 存储库(由 Composer 创建)管理

4

3 回答 3

2

在 Monolog 的结尾,对于放置它的位置或如何称呼它实际上没有任何限制。关键只是它实现了独白的 HandlerInterface 或从现有的处理程序之一扩展。

现在这取决于您的处理程序是什么,如果它是其他人可以使用的通用东西,您可以将其作为拉取请求提交给 monolog。
如果没有,您可以为它创建一个自己的作曲家包,或者将其放入src/Acme/Monolog/FooHandler或类似的东西中,因此它保留在您的应用程序中,但显然不在捆绑包中。缺点是您需要在其中一个捆绑包中将其配置为服务,因此您仍然对那里的捆绑包有某种依赖性。
也许将它作为自己的捆绑包是有意义的。但是对于一个类来说,它是相当多的样板。
如果您的所有捆绑包都是特定于应用程序的并且不太可能从中提取出来,那么尽管 IMO 具有跨捆绑包依赖关系是可以的。
无论如何,依赖性不是很强,因为一个包可以包含处理程序并对其进行配置。其他包仍然可以记录到独白,即使处理程序不存在,它们也可以记录。它只是不会去那个特定的处理程序。什么都不应该打破。

如您所见,这只是很多权衡,如果不了解您的项目,很难说哪种解决方案最合适。

于 2013-03-05T15:07:04.010 回答
0

如果你想拥有你的处理程序类,lib/你需要将lib/文件夹添加到你的composer.json 自动加载部分。例如:

"autoload": {
    "psr-0": { "": ["src/", "lib/"] }
}

查看 Composer 文档:

基本用法

自动加载

于 2013-03-05T14:49:12.860 回答
0

我认为这里的常用方法是在您的 Bundle 中使用具有明确依赖关系的“Bridge”目录。如果您有其他依赖于此的捆绑包,我们所做的是创建一个 ServiceBundle,它基本上适用于应用程序内所有捆绑包中的所有共享服务。如果您有分发此捆绑包的计划,这可能不适合您,但可能不适合您。

于 2014-07-19T03:53:28.493 回答