Php Symfony:覆盖其他插件中的插件模型

Php Symfony:覆盖其他插件中的插件模型,php,symfony1,doctrine,symfony-1.4,symfony-plugins,Php,Symfony1,Doctrine,Symfony 1.4,Symfony Plugins,我们正在建设一个新的网站,它将重用其他网站使用的现有symfony软件。为了避免重复代码和数据,我将可重用组件移动到插件(“应用程序插件”)中。该插件将在网站的svn存储库中配置为svn external 现有symfony实例包含覆盖的条令类(模型、表单、表单过滤器),这些类最初在其他插件(例如sfDoctrineGuardPlugin)中定义。被重写的类可以被两个symfony实例重用,因此我将把它们移到“appplugin”中。但这会带来问题: 例如,如果有人运行symfony-docto

我们正在建设一个新的网站,它将重用其他网站使用的现有symfony软件。为了避免重复代码和数据,我将可重用组件移动到插件(“应用程序插件”)中。该插件将在网站的svn存储库中配置为svn external

现有symfony实例包含覆盖的条令类(模型、表单、表单过滤器),这些类最初在其他插件(例如sfDoctrineGuardPlugin)中定义。被重写的类可以被两个symfony实例重用,因此我将把它们移到“appplugin”中。但这会带来问题:

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

一个解决方法是在app插件的config/autoload.yml中排除这些类。但是有更好的办法吗

编辑

我使用“应用程序插件”一词是为了避免混淆普通插件(如sfGuard)和包含共享组件的插件


之前:


之后:


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

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

我使用了术语“应用程序插件”,以避免混淆普通插件(例如sfGuardPlugin)和我们的插件(包含两个网站的可重用组件)。被覆盖的sfGuardPlugin模型/表单也可以被两个网站重用。我无法将重写的类移动到sfGuardPlugin,在这种情况下,它定义了父类。@fishbone:我想我更了解您的问题。如果您不太不愿意编辑sfGuardPlugin(我知道,这是一个糟糕的做法),您可以通过在schema.yml文件上添加“options:\n symfony:\n filter:false”来禁用自动表单和过滤器生成,并在应用程序插件中继承sfplugin文件。但是,模型文件仍然存在问题。