0

私はレンタル自転車プラットフォームを開発していますが、予約フォーム (ステップ 2) で立ち往生しています。

最初のステップで、ユーザーは予約の日付と個人データを選択しました。2 番目のステップでは、レンタルしたい自転車の数を、0 から x (その日に利用可能な自転車まで) の選択ウィジェットを含むフォームに基づいて選択できます。

問題は、このフォームを管理する方法がわからないことです。今では、「Bike」​​エンティティのコレクションを持つ「BookingType」があります。その時点で、ユーザーはレンタルする自転車を選択できますが、数量は選択できません。バイクを含む「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/CraueFormFlowBundle

次のように問題を解決できます。

注文エンティティ:

  • ユーザー (N オーダーは 1 ユーザー)
  • BikesOrders のコレクション (1 つの Order には N BikeOrder があります)
  • (多分合計金額)

BikeOrder エンティティ:

  • OrderEntity (N BikeOrder には 1 つの注文があります)
  • BikeEntity (N BikeOrder には 1 つの自転車があります)
  • すべての設定 (高さなど)

バイク エンティティ:

  • 名前
  • ブランド
  • ...

これは、注文と製品との関係を行う方法にすぎません。必要に応じてカスタマイズしてください。特に、双方向または単方向の関連付けマッピングを自由に設定したい場合は。

于 2013-10-28T03:46:14.357 に答える