在预订表格中嵌入可用性表格

时间:2013-10-27 18:54:31

标签: forms symfony doctrine-orm

我正在开发一个租赁自行车平台,我正处于预订表格中(步骤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,用户可以将其预订定制为“自行车高度”,“车轮尺寸”等。

所以?你如何解决暴露的问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您已经在表单流程中讨论了步骤,因此建议您使用CraueFormFlowBundle。在这里,您可以为表单流程中的每个步骤构建表单类型。 https://github.com/craue/CraueFormFlowBundle

您可以按如下方式解决问题:

订单实体:

  • 用户(N订单有1个用户)
  • BikesOrders的集合(1个订单有N BikeOrder)
  • (也许是总价)

BikeOrder实体:

  • OrderEntity(N BikeOrder有1个订单)
  • BikeEntity(N BikeOrder有1辆自行车)
  • 数量
  • 您的所有设置(例如身高,......)

自行车实体:

  • 名称
  • 品牌
  • ...

这只是一种可以与订单和产品建立关系的方式。根据您的需求进行自定义 - 特别是如果您希望双向或单向关联映射由您决定。