2

我们正在建立一个新网站,它将重用另一个网站使用的现有 symfony 软件。我将可重用组件移动到插件(“app-plugin”)中,以避免重复代码和数据。该插件将在网站的 svn 存储库中配置为 svn-external。

现有的 symfony 实例包含最初在其他插件(例如 sfDoctrineGuardPlugin)中定义的被覆盖的学说类(模型、表单、表单过滤器)。两个 symfony 实例都可以重用被覆盖的类,因此我将把它们移到“app-plugin”中。但这会导致问题:

例如,如果有人运行symfony doctrine:build-forms,移动的文件将由 lib/form/doctrine 中的任务重新创建,并且将包含空的类定义。原因对我来说很清楚:symfony 怎么知道“app-plugin”已经定义了那些表单类?唯一的方法是在执行任务之前自动加载所有类并检查类是否已经可用。

一种解决方法是在应用插件的 config/autoload.yml 中排除这些类。但是有更好的方法吗?

编辑

我使用术语“app-plugin”来避免普通插件(例如 sfGuard)和我们包含共享组件的插件之间的混淆。


前:

之前的依赖


后:

之后的依赖

4

2 回答 2

2

您在说什么“应用程序插件”?通常,您所要做的就是将覆盖的类留在原处,并将它们包含在父类中的代码移动到应该在插件中的父类中。如果你想改变一个特定的 symfony 应用程序的行为,那么你可以编辑这些被覆盖的类。

于 2011-05-17T12:50:03.087 回答
0

似乎没有比在app-plugin 的config/autoload.yml 中排除原始模型更好的方法了。即使您可以派生如上图所示的模型类,您也会在运行 build-forms 任务时遇到麻烦。我查看了表单生成器的源代码,发现这是不可能的。因此,唯一的解决方案是:避免构建表单任务,重写表单生成器,或者如前所述,使用 autoload.yml。

于 2011-06-14T12:12:48.950 回答