2014-09-23 23 views
7

Örneğin, bir öğenin örneğini phpMyAdmin'in yaptığı gibi yapmak istediğim bir sayfada çalışıyorum.Symfony 2'de formların bir ızgarası oluşturma

Daha açık bir şekilde, sütunların varlıkların alanları olduğu ve satırların bu varlığın tüm örnekleri olduğu bir tablo almak ve tüm değerleri (id dışında) düzenlenebilir yapmak ve veritabanına kaydetmek.

Sorunum, Symfony ile (bu çerçevede oldukça yeniyim) bunu yapmak için iyi bir uygulamanın ne olduğunu gerçekten bilmiyorum. Benim ilk fikir

  • tek form oluşturmak için ama tek bir formda çeşitli örneklerini birleştirmek zor görünmektedir.

  • Ben de satır başına bir form oluşturmak için düşünülen, ancak bu her satır kendi "Gönder" alanını olurdu anlamına gelir ve aynı anda birden fazla üst üste değişiklikleri kaydetmek için imkansız olurdu.

  • Symfony'nin belgesinde, form koleksiyonları hakkında bir konu gördüm, ancak bu, kullanabileceğim bir şey olup olmadığını bilmiyorum, çünkü varlığımın örnekleri tamamen bağımsız.

Belki ben bir şey eksik, ben bunu yapmak isteyen ilk değilim düşünüyorum, ama bunu yapmak için herhangi bir yol bulmak başaramadı?

Herhangi bir tavsiye memnuniyetle karşılandı, teşekkürler! "Là symfony à " Doing

cevap

4

Eğer Tip koleksiyonunun bir alan vardır örneğin AllRowsType için, bir Baz Formu oluşturabilir ve satırların her biri Tipi ROWTYPE geçerli: Ardından

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder    
      ->add('rows', 'collection', array(
       'type' => new RowType(), 
       'allow_add' => false, 
       'allow_delete' => false, 
       'by_reference' => false 
      )); 
    } 

RowType, varlığınız için normal bir form olacaktır.

class RowType extends AbstractType { 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder    
      ->add('name', 'text'); 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'Acme\Bundle\DemoBundle\Entity\Row', 
     )); 
    } } 

doğrulamaları normal forma gibi Rowtype üzerinde olabilir, ancak, sorunlarla ederseniz, AllRowsType varsayılan seçenekleri cascade_validation => true ayarlayabilirsiniz.

dal üzerinde
{% for row in form.rows%} {{ form_row(row.name) }} {% endfor %} 

Yapabileceğiniz her satır varlığın kimliğini almak amacıyla:

{{ row.vars.value.id }} 

Kumanda üzerindeki yapabileceğiniz

Yapabileceğiniz dal her Rowtype yineleme için $allrowsForm->get('rows')->getData() ve Satır Varlıkları ArrayCollection var ve ne istersen onu yap.

Form koleksiyonlarının nasıl işleneceğini öğrenmek için http://symfony.com/doc/current/cookbook/form/form_collections.html belgelerini okuyabilirsiniz.

+0

Bu detailed cevap için çok teşekkürler. Bunu deniyorum. – ibi0tux