0

我正在开发一个租赁自行车平台,但我被困在预订表格中(第 2 步)。

在第一步中,用户选择了预订日期和他们的个人数据。在第二步中,他们可以根据带有从 0 到 x 的选择小部件的表单选择他们想要租用的自行车数量(直到该日期可用的自行车)。

问题是我不知道如何管理这个表格。到目前为止,我有一个“BookingType”,其中包含“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,用户可以在其中自定义他们的预订,如“自行车高度”、“车轮尺寸”等。

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

谢谢!

4

1 回答 1

0

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

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

订单实体:

  • 用户(N 订单有 1 个用户)
  • BikesOrders 集合(1 个订单有 N 个 BikeOrder)
  • (可能是总价)

BikeOrder 实体:

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

自行车实体:

  • 姓名
  • ...

这只是您与订单和产品建立关系的一种方式。根据您的需要自定义它 - 特别是如果您想要双向或单向关联映射取决于您。

于 2013-10-28T03:46:14.357 回答