2016-11-12 2 views
0

私はsymfonyプログラミングの初心者です。コントローラー内の2つのオブジェクトを比較するにはどうすればいいですか? これは私のページの様子です:https://gyazo.com/bab9d948bdb7a2ae3375feb553ce07b2IF symfony2を使用してコントローラ内のオブジェクトを比較する方法

左上に私の金額があり、私は独自の価格の車を購入したいと思います。金額はデータベースに独自の場所があり、車には別の場所があります。購入車を押すと、次のようなフォームが開きます。https://gyazo.com/58582c628d8507e6b3eac48a7645f2a1

2つのオプションがあります:先頭ページにリダイレクトするBackと、データベースから車を削除するDelete(Buy)です。 これは、コントローラ内の関数がどのように見えるかです:

public function deleteAction(Request $request, Car $car){ 
$form = $this -> createFormBuilder($car) 
     ->add('save',SubmitType::class,['label' => 'DELETE']) 
     ->getForm(); 

    $form2 = $this -> createFormBuilder($car) 
     ->add('save2',SubmitType::class,['label' => 'BACK']) 
     ->getForm(); 


    $form->handleRequest($request); 
    $form2->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 


     $em = $this ->getDoctrine()->getManager(); 
     $baze = $em->getRepository('AppBundle:Produktas')->find(1); 
     $price =$car->getPrice(); 



     if($price < $baze) { 
     $baze->setKaina($baze->getKaina() - $price); 
      $em->remove($car); 
    } 

     $em->flush(); 
     return $this->redirectToRoute('car_index'); 
    } 

質問です:どのように私は適切な方法であれば中に2つのオブジェクトを比較することができますか?私は(私のお金>車の価格){私はそれを購入することができます}

答えて

0

最初にあなたのバックリンクをフォームにではなく通常のリンクに変更します。

あなたの間違いは、価格とProduktasが等しいかどうかを確認することです。私はここでgetPriceメソッドを忘れてしまったと思います。

しかし、私は不変オブジェクトでこれを行うでしょう。新しいお金オブジェクトを作成します。http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/embeddables.html

私は、Pocketエンティティを作成し、その中にマネーエンティティを使用することをお勧めします。

ここで、同じエンティティを持つ自動車エンティティの価格を定義することができます。

車のエンティティでは、 isBuyable(Pocket $pocket)というメソッドを定義する必要があります。ここでは、お金の価値が自動車のエンティティの内部のお金のオブジェクトよりも大きいか等しいかをチェックし、条件が合致すれば真を返すべきです。

コントローラでは、isBuyableメソッドを使用しています。

はまた、あなたが、それは、 乾杯のお役に立てば幸いですhttp://symfony.com/doc/current/doctrine/repository.html

を見て、あなたの車のリポジトリに新しいメソッドを作成し、buyableだけの車を取得することができ、 ロビン

関連する問題