2017-01-06 1 views
0

私は3列にいくつかの(< 10)行の単純なテーブルを持っています。データベースからのデータを使用してSymfony/Twigフォームを作成する

表:

/** 
* @ORM\Entity 
* @ORM\Table(name="property_addition_cost_frequency") 
*/ 
class PropertyAdditionCostFrequency 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */private $id; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $label; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $group; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $active; 
    //all getters and setters 
} 

Iが予め充填形で1行を示すための作業コードを有しています。ノーならば、私はテーブルからすべての行でフォームを取得できますか

AdminCoreDataController.php

/** 
* @Route("/core_data/{id}", defaults={"id" = 1}, name="admin_core_data") 
*/ 
public function showCoreDataListAction(Request $request, PropertyAdditionCostFrequency $propertyAdditionCostFrequency) 
{ 
    $form = $this->createForm(PropertyAdditionCostFrequencyForm::class, $propertyAdditionCostFrequency); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()){ 
     $propertyAdditionCostFrequency = $form->getData(); 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($propertyAdditionCostFrequency); 
     $em->flush(); 
     $this->addFlash('success', 'successfully changed the data'); 
     return $this->redirectToRoute('admin_property_list'); 
    } 

    return $this->render('logged_in/content/admin/core_data/core_data.html.twig', [ 
     'propertyCostFrequencyForm' => $form->createView() 
    ]); 
} 

core_data.html.twig

{{ form_start(propertyCostFrequencyForm) }} 
    {{ form_widget(propertyCostFrequencyForm.label) }} 
    {{ form_widget(propertyCostFrequencyForm.active) }} 
    <button type="submit">send</button> 
{{ form_end(propertyCostFrequencyForm) }} 

PropertyAdditionCostFrequencyForm.php

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add( 'label') 
     ->add( 'active') 
    ; 
} 

"id"は与えられていますか?

+3

スタート:http://symfony.com/doc/current/form/form_collections.html – Cerad

+0

私は右理解していれば、あなたはすべてのPropertyAdditionCostFrequencyを編集したいです同じ時間ですか?または、各行に1つのフォームが10個ありたいですか? – goto

+0

@gotoはい、すべての行を1つの形式で同時に編集したい – bob

答えて

1

Ceradが正しかったので、symfony.com/doc/current/form/form_collections.htmlはいい場所でした。ありがとうございました!

class PropertyAdditionCostFrequency 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */private $id; 

    /** 
    * @ORM\Column(type="string") 
    */ 
    private $label; 

    /** 
    * @ORM\Column(type="integer") 
    */ 
    private $group; 

    /** 
    * @ORM\Column(type="boolean") 
    */ 
    private $active; 

    //getter and setter 
} 

AdminCoreDataController.php

public function showCoreDataListAction(Request $request) 
{ 
    $repository = $this->getDoctrine()->getRepository('AppBundle:PropertyAdditionCostFrequency'); 
    $cost_frequency = $repository->findAll(); 

    $PropertyAdditionCostFrequency = new PropertyAdditionCostFrequency(); 

    foreach ($cost_frequency as $k => $v) { 
     $PropertyAdditionCostFrequency->getLabel()->add($v); 
    } 

    $form = $this->createForm(PropertyAdditionCostFrequencyForm::class, $PropertyAdditionCostFrequency); 
    $form->handleRequest($request); 

    if($form->isSubmitted() && $form->isValid()){ 
     $em = $this->getDoctrine()->getManager(); 
     $em->flush(); 
     $this->addFlash('success', 'successfully changed the data'); 
     return $this->redirectToRoute('admin_core_data'); 
    } 

    return $this->render('logged_in/content/admin/core_data/core_data.html.twig', [ 
     'propertyCostFrequencyForm' => $form->createView() 
    ]); 
} 

core_data.html.twig

{{ form_start(propertyCostFrequencyForm) }} 
    {% for single_frequency in propertyCostFrequencyForm.label %} 
     <div class="row"> 
      <div class="col-sm-4"> 
       {{ form_widget(single_frequency.label) }} 
      </div> 
      <div class="col-sm-1"> 
       {{ form_widget(single_frequency.active) }} 
      </div> 
     </div> 
    {% endfor %} 
<button type="submit">send</button> 
{{ form_end(propertyCostFrequencyForm) }} 

PropertyAdditionCostFrequencyForm.php

:私は

表を得たコードにいくつかの変更後 フォームのコレクションで

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add( 'label', CollectionType::class, array(
      'entry_type' => PropertyAdditionCostFrequencyType::class 
     )) 
     ->add( 'active', CollectionType::class, array(
      'entry_type' => PropertyAdditionCostFrequencyType::class 
     )) 
    ; 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults([ 
     'data_class' => PropertyAdditionCostFrequency::class 
    ]); 
} 

PropertyAdditionCostFrequencyType.php

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('label') 
     ->add('active', CheckboxType::class, array(
      'required' => false, 
     )) 
    ; 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => PropertyAdditionCostFrequency::class, 
    )); 
} 
関連する問題