我正在开发一个租赁自行车平台,我正处于预订表格中(步骤2)。
在第一步中,用户选择了预订日期及其个人数据。在第二步中,他们可以根据具有从0到x的选择小部件的表单(直到该日期可用的自行车)来选择他们想要租用的自行车数量。
事情是我不知道如何管理这个表格。到现在为止,我有一个“BookingType”,它有一个“Bike”实体的集合。在那一刻,用户可以选择他们想要租用的自行车而不是数量。你会创建一个包含在Bike上的“BookingBikeType”,而BookingType会包含这个新的“BookingBikeType”的集合吗?
如果有帮助,我粘贴了架构和预订类型:
BEM\ReservaBundle\Entity\Reserva:
type: entity
table: null
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
inici:
type: datetime
fi:
type: datetime
import:
type: float
nullable: true
manyToMany:
bicicletes:
targetEntity: BEM\BikeBundle\Entity\Bike
oneToMany:
reserva_personalitzacio:
targetEntity: ReservaPersonalitzacio
mappedBy: reserva
manyToOne:
client:
targetEntity: BEM\ClientBundle\Entity\Client
cascade: [persist]
lloc_recollida:
targetEntity: ReservaLlocRecollida
lifecycleCallbacks: { }
class ReservaType extends AbstractType {
private $translator;
public function __construct($translator = null) {
$this->translator = $translator;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('inici', null, array(
'widget'=>'single_text',
'format'=>'yyyy-MM-dd',
'attr'=>array('class'=>'diaInicio',
'placeholder'=>(($this->translator === null) ? '' : $this->translator->trans('Fecha inicio')),
'readonly'=>'readonly'
)
))
->add('fi', null, array(
'widget'=>'single_text',
'format'=>'yyyy-MM-dd',
'attr'=>array('class'=>'diaFinal',
'placeholder'=>(($this->translator === null) ? '' : $this->translator->trans('Fecha final')),
'readonly'=>'readonly'
)
))
->add('import')
->add('lloc_recollida', null, array('empty_value'=>false))
->add('nou_lloc_recollida', new ReservaLlocRecollidaType($this->translator), array('required'=>false))
->add('client', new ClientType($this->translator))
->add('bicicletes')
//->add('bicicletes', new ReservaBicicletaType())
;
}
对于在步骤2中选择的每辆自行车,它将创建尽可能多的ReservaPersonalitzacio,用户可以将其预订定制为“自行车高度”,“车轮尺寸”等。
所以?你如何解决暴露的问题?
谢谢!
答案 0 :(得分:0)
由于您已经在表单流程中讨论了步骤,因此建议您使用CraueFormFlowBundle。在这里,您可以为表单流程中的每个步骤构建表单类型。 https://github.com/craue/CraueFormFlowBundle
您可以按如下方式解决问题:
订单实体:
BikeOrder实体:
自行车实体:
这只是一种可以与订单和产品建立关系的方式。根据您的需求进行自定义 - 特别是如果您希望双向或单向关联映射由您决定。