我们正在构建一个新网站,该网站将重用其他网站使用的现有symfony软件。我正在将可重用组件移动到插件(“app-plugin”)中,以避免重复代码和数据。该插件将在网站的svn存储库中配置为svn-external。
现有的symfony实例包含最初在其他插件中定义的重写的学说类(模型,表单,表单过滤器)(例如sfDoctrineGuardPlugin)。被重写的类可以被symfony-instances重用,因此我将它们移动到“app-plugin”。但这会导致问题:
例如,如果某人运行symfony doctrine:build-forms
,则移动的文件将由lib / form / doctrine中的任务重新创建,并将包含空的类定义。原因很清楚:symfony如何知道“app-plugin”已经定义了那些表单类?唯一的方法是在执行任务之前自动加载所有类,并检查类是否已经可用。
解决方法是在app-plugin的config / autoload.yml中排除这些类。但是有更好的方法吗?
修改
我正在使用术语“app-plugin”来避免普通插件(例如sfGuard)和包含共享组件的插件之间的混淆。
在:
后:
答案 0 :(得分:2)
你在谈论这个“app-plugin”是什么?通常,您所要做的就是将覆盖类保留在它们所在的位置,并将它们包含的代码移动到父类中,这些类应该在插件中。如果您想更改特定symfony应用程序的行为,则可以编辑这些覆盖类。
答案 1 :(得分:0)
似乎没有比在 app-plugin的配置/ autoload.yml中排除原始模型更好的方法了。即使您可以如上图所示派生模型类,一旦运行构建表单任务,您将遇到麻烦。我查看了表单生成器的源代码,该代码显示这是不可能的。因此,唯一的解决方案是:避免构建表单任务,重写表单生成器,或者如前所述,使用autoload.yml。