2016-09-03 11 views
0

異なる入力エンティティに対して私のフォームで使用する際に問題があります。symfony、異なる入力diffエンティティのフォーム使用方法

symfony 3.1。

私は、クライアントとその注文に関する情報を保存するためにフォームを実行するタスクを持っています。私はそのクライアントがクライアントのテーブルと順序ではなく、1つのフォームになることを望みます。それは注文エンティティにこの方法を検索するため

は、今私は... ...プロパティ「名前」も方法の一つどちらでエラーが発生している

/** 
* Order 
* 
* @ORM\Table(name="order_work") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\OrderWorkRepository") 
*/ 
class OrderWork 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Client", cascade={"persist"}) 
    * @ORM\JoinColumn(name="client_id", referencedColumnName="id") 
    */ 
    private $client; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="orderNumber", type="string", length=255) 
    */ 
    private $orderNumber; 

    /** 
    * @var date 
    * 
    * @ORM\Column(name="date", type="string", length=255) 
    */ 
    private $date; 

私はすべてのコードが表示されないんだけど、中エンティティ私はすべてのゲッターとセッターを持っています。また、それがあるべき形でのように、あなたは変数$クライアントとクライアントエンティティをマッピングしているあなたのOrderWorkエンティティで

/** 
* Client 
* 
* @ORM\Table(name="client") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\ClientRepository") 
*/ 
class Client 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="surname", type="string", length=255) 
    */ 
    private $surname; 

とコントローラで...

public function createAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 
    $prefixId = 1; 
    $date = date('Y-m-d'); 
    $now = date('Y-m-d H:i:s'); 
    $orderNumber = $this->generateOrderNumber($em, $prefixId, $date); 

    $orderType = $request->get('orderType'); 

    $order = new OrderWork(); 
    $order->setOrderNumber($orderNumber); 

    $order->setDate($date); 
    $order->setOrderDate($now); 
    $order->setreturnDate(''); 
    $order->setOrderType($orderType); 
    $order->setStatus(1); 

    $form = $this->createFormBuilder($order) 
     ->add('orderNumber', TextType::class, ['label' => 'Užsakymo numeris', 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px', 'disabled' => true]]) 
     ->add('date', HiddenType::class) 
     ->add('orderDate', HiddenType::class) 
     ->add('returnDate', HiddenType::class) 

     ->add('name', EntityType::class, ['label' => 'Vardas', 'attr' => [ 
       'style' => 'margin-bottom:15px; width:250px'], 
       'class' => 'AppBundle:Client']) 

     ->add('device', TextType::class, ['label' => 'Prekė', 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 
     ->add('workPrice', NumberType::class, ['label' => 'Pristatyta kaina', 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 
     ->add('deadLine', TextType::class, ['label' => 'Numatomi terminai', 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 

     ->add('complect', TextType::class, ['label' => 'Komplektacija', 'required' => false, 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 
     ->add('description', TextType::class, ['label' => 'Gedimo aprašymas', 'required' => false, 'attr' => 
      ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 
     ->add('screenPass', TextType::class, ['label' => 'Įrenginio ekrano užraktas/slaptažodis', 
      'required' => false, 'attr' => ['class' => 'form-control', 'style' => 'margin-bottom:15px; width:250px']]) 

     ->add('surrogatephone', EntityType::class, ['label' => 'Pakaitinis telefonas', 
      'attr' => ['class' => 'form-control' ,'style' => 'margin-bottom:15px; width:250px'], 
      'class' => 'AppBundle:SurrogatePhone', 
      'query_builder' => function ($em) { 
       return $em->createQueryBuilder('s') 
        ->orderBy('s.id', 'ASC'); 
      }, 
      'placeholder' => 'Pasirinkite', 
      'choice_label' => 'name',]) 
     ->add('save', SubmitType::class, ['label' => 'Sukurti', 'attr' => 
       ['class' => 'btn btn-primary', 'style' => 'margin-top:15px']] 

     )->getForm(); 

    $form->handleRequest($request); 

私の英語のため申し訳ありません:)

答えて

2

 `->add('client', EntityType::class, ['label' => 'Vardas''attr' => [ 
      'style' => 'margin-bottom:15px; width:250px'], 
      'class' => 'AppBundle:Client'])` 

代わりの

 ->add('name', EntityType::class, ['label' => 'Vardas', 'attr' => [ 
      'style' => 'margin-bottom:15px; width:250px'], 
      'class' => 'AppBundle:Client']) 
+0

私はこのエラーをキャッチします。プロパティ "name"も "name()"、 "getname()"/"isname()"または "__call()"のいずれのメソッドも使用できません。 ) "が存在し、29行目のorders/new_order.html.twigに" Symfony \ Component \ Form \ FormView "クラスのパブリックアクセスがあります。 –

+0

テンプレートform.name form.client.nameを試してみます。 –

+0

form.nameまたはform.client.nameの代わりにform.clientを試してください –

1

k今、私はあなたの要件を理解しています。このためには、ClientTypeフォームをOrderTypeに埋め込む必要があります。

は、あなたが、あなたは、あなたがリンクHow to Embed Formsをたどることができ、より詳細については、この

use Symfony\Component\Form\FormBuilderInterface; 
use AppBundle\Form\ClientType; 

public function buildForm(FormBuilderInterface $builder, arra $options) 
{ 
    // ... 

    $builder->add('client', ClientType::class); 
} 

のようにこれを追加することができ、両方のClientTypeとOrderTypeクラスを作ったとします。

+0

ありがとう、その助け私;) –

関連する問題