2013-03-05 51 views
0

我创建了一个派生自AbstractProcessingHandler的处理程序类。我已经看到,我可以把它放在src/MyNamespace/MyBundle/Monolog/中,但它让我担心了一下,因为这个处理程序在我登录数据的其他几个bundle中使用。所以其他捆绑包需要MyBundle才能正常工作,只是因为这个处理程序。我应该在哪里将我的Monolog自定义处理程序放入我的Symfony2项目中?

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

或者我应该为这个处理函数创建一个新的bundle?

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

回答

2

在独白的最后有真正的把它放在哪里没有限制,或者你怎么称呼它。关键仅在于它实现了monolog的HandlerInterface或从现有的一个处理程序扩展而来。

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

正如你所看到的,这只是很多的权衡,很难说哪个解决方案是最合适的,而不知道更多关于你的项目。

0

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

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

看看作曲家文档:

Basic Usage

Autoload

0

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

相关问题