【发布时间】:2013-11-06 21:01:56
【问题描述】:
我正在制作一个广告页面。广告可以是不同的类型,因此具有不同的数据。例如,车辆会将make 和model 作为额外数据。
现在,我有一个基本原则实体Advert,其中包含每个广告所需的数据。不同的广告依次继承这些数据(doctrine2 discriminatormap)
如果用户选择创建车辆广告,我需要动态填充表单(使用 ajax 和 symfony2 表单)我想显示车辆广告的选项。但我还需要将实体更改为AdvertVehicle 的形式。
这可能吗?我确实在 symfony2 主页上阅读了食谱条目
《如何使用表单事件动态修改表单》: 这应该通过对您的应用程序进行 AJAX 回调来处理。在该控制器中,您可以提交表单,但无需处理它,只需使用提交的表单来呈现更新的字段。然后可以使用来自 AJAX 调用的响应来更新视图。
我了解如何将 ajax 回调回我的控制器,并且我了解如何使用表单事件,但是如何获取渲染的选择框(例如包含车辆模型)的响应?使用新的 AbstractType?还是表单生成器?
然后当用户实际提交表单时,我需要使用所选广告类型的实体。我可以根据用户在表单中的选择动态更改实体吗?
编辑
我检查了表格继承,这很好,谢谢。我扩展了AdvertType 并覆盖了buildForm() 方法,在添加AdvertVehicleType 所需的项目之前,我调用了父方法。
进一步说明
每个广告实体都包含price、description、title 和category。有些广告包含更多,例如make 和model。它们由discriminatormap (doctrine2) 区分
示例:
// -- Entity
class CarAdvert extends Advert {
protected $model;
protected $make;
}
// -- Entity
// -- This uses discriminator mapping
class Advert {
protected $title;
protected $description;
protected $price;
protected $category;
}
如果用户选择类别 cars 我想使用 CarAdvert 实体(用于验证和持久性)如果用户选择家庭项目类别我只想使用普通的 Advert 实体。
一个主要问题仍然是我无法弄清楚如何通过 ajax 呈现扩展表单。这部分有什么提示吗?当用户选择汽车作为类别时,我希望更新表单(通过 jQuery/ajax)但是我如何制作一个控制器来检索表单的扩展部分并将 html 作为响应发送回(不使用树枝并在视图中渲染,这可能吗)?
解决方案:
请看下面的答案!
【问题讨论】:
-
你可以在你的表单类型中使用继承,它避免了为两个相似的表单重复代码。示例:
AdvertType有 2 个字段。AdvertVehicleType可以扩展AdvertType以添加 2 个字段。请告诉我们有关您的实体的更多信息,它们是如何声明的,您如何区分两种类型的Advert等。 -
关于这个问题@Asbestos 的任何更新?我面临着类似的问题,因此我对可能的解决方案或解决此问题的经验等感兴趣。谢谢!
-
我希望更新后的答案足够好@acrobat 如果您需要更多信息,请随时发表评论!
标签: php jquery ajax symfony doctrine-orm