学说的继承。有没有一种简单的方法来获取所有子类/表在symfony的形式使用它们在选择字段?
-
23-09-2019 - |
题
我刚开始使用symfony的1.4和学说。 ( - 前1.2 +行走了许多使用1.0)。
我想给学说一试,因为快速和巨大 在过去的发展过程。
由于jwage ;-)
im使用表继承。这是我的schema.yml的一小部分:
Articles:
columns:
id:
type: integer(4)
primary: true
notnull: true
autoincrement: true
marken_id:
type: integer(4)
notnull: false
user_id:
type: integer(4)
notnull: false
address_id:
type: integer(4)
notnull: false
...
Vehicles:
inheritance:
extends: Articles
type: concrete
Rennfahrzeuge:
columns:
stvo:
type: boolean
notnull: false
default: false
inheritance:
extends: Vehicles
type: concrete
Tourenwagen:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Rennfahrzeuge
type: column_aggregation
keyField: type
keyValue: 6
Karts:
inheritance:
extends: Vehicles
type: concrete
TonyKart:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 1
...
Sonstige:
inheritance:
extends: Karts
type: column_aggregation
keyField: type
keyValue: 9
林现在考虑使用一个简单的方法来建立一个合适的形式。
用户应该有选择在表格的顶场(如你 可以在这里看到: http://msm-esv.dyndns.org/frontend_dev。 PHP / fahrzeuge /插入 )
您应该选择“父类”像Rennfahrzeuge或卡丁车 等等。
这是用户应该选择子类像Tourenwagen或之后 SONSTIGE。
然后,页面应该重新加载并显示正确的形式。
是否有任何学说函数来获取在继承/子类 在第二选择栏显示它们?
(例如Rennfahrzeuge具有Tourenwagen,...,...,和SONSTIGE卡丁车具有 TonyKart,...,...,SONSTIGE)
在,我可以动态地创建所分配的形式类,如:
$chooseMode = $request->getParameter('chooseMode').'Form';
$modeFormClass = new $chooseMode();
或我已经想到只设置正确的模型中的父 窗体类。
你有什么想法?我会很感激的任何建议和 帮助:-)
非常感谢,
马
解决方案
是否有直接功能,诸如学说getSubclasses
或PHP get_children_of
?这并不是说我已经遇到,在教义或PHP。我所知道的最接近的是PHP函数 is_subclass 你可以通过所有可能的类,而迭代使用。
做你的子类从主力机型显著变化?我只看到一列变化的例子以上,但我猜测,只是为了简洁。
我知道你正在试图结构的吸引力,但它也似乎像它可能是从长远来看,一个令人难以置信的痛苦。有没有可能,而不是建立一个单独的VehicleCategory
模型,参考自身提供一个嵌套的结构,然后你Vehicles
可能属于这些类别?这将具有的 Rennfahrzeuge 作为一个顶层类别和 Tourenwagen 和 SONSTIGE 将类别与 Rennfahrzeuge 的父与Vehicles
属于所有三个。如果你没有在你的孩子机型太多磁场的变化,您可以包括所有的自定义字段中Vehicles
模型和独显/集他们在适当的时候。
只是一些想法,希望帮助。
其他提示
如果你需要找到一个学说记录的子类,你可以使用结果
$yourSuperObject->getTable()->getOption('subclasses')
或点击
Doctrine::getTable('SuperClass')->getOption('subclasses');